Allow cobalt registry entries to specify IDs for projects.

Bug: 36820
Change-Id: I44838e65d6c86e827ccb1fdb23df6ace34e45499
diff --git a/src/bin/config_parser/src/config_parser/config_reader_test.go b/src/bin/config_parser/src/config_parser/config_reader_test.go
index 1286995..dc28dff 100644
--- a/src/bin/config_parser/src/config_parser/config_reader_test.go
+++ b/src/bin/config_parser/src/config_parser/config_reader_test.go
@@ -48,15 +48,18 @@
   customer_id: 1
   projects:
     - project_name: ledger
+      project_id: 1
       project_contact: bob
       cobalt_version: 1
     - project_name: module_usage_tracking
+      project_id: 2
       project_contact: bob
       cobalt_version: 1
 - customer_name: test_customer
   customer_id: 100
   projects:
     - project_name: test_project
+      project_id: 1
       project_contact: bob
       cobalt_version: 1
 `
@@ -66,15 +69,18 @@
   customer_id: 1
   projects:
     - naINVALIDme: ledger
+      project_id: 1
       project_contact: bob
       cobalt_version: 1
     - project_name: module_usage_tracking
+      project_id: 2
       project_contact: bob
       cobalt_version: 1
 - customer_name: test_customer
   customer_id: 100
   projects:
     - project_name: test_project
+      project_id: 1
       project_contact: bob
       cobalt_version: 1
 `
diff --git a/src/bin/config_parser/src/config_parser/project_list.go b/src/bin/config_parser/src/config_parser/project_list.go
index 646a664..e6d43cc 100644
--- a/src/bin/config_parser/src/config_parser/project_list.go
+++ b/src/bin/config_parser/src/config_parser/project_list.go
@@ -181,16 +181,24 @@
 	}
 
 	if c.CobaltVersion == CobaltVersion1 {
-		// TODO(zmbush): Remove once config is updated to use project_id
-		_, ok = p["id"]
-		if ok {
-			return fmt.Errorf("Project %v is using version 1.0. Version 1.0 projects may not specify an id.", c.ProjectName)
-		}
-		_, ok = p["project_id"]
-		if ok {
-			return fmt.Errorf("Project %v is using version 1.0. Version 1.0 projects may not specify an id.", c.ProjectName)
-		}
-		c.ProjectId = IdFromName(c.ProjectName)
+		v, ok := p["project_id"]
+    if !ok {
+      // TODO(zmbush): Remove once config is updated to use project_id
+      v, ok = p["id"]
+      if !ok {
+        c.ProjectId = IdFromName(c.ProjectName)
+      }
+    }
+    if ok {
+      projectId, ok := v.(int)
+      if !ok {
+        return fmt.Errorf("ID '%v' for project %v is not an integer.", v, c.ProjectName)
+      }
+      if projectId <= 0 {
+        return fmt.Errorf("ID for project %v is not a positive integer.",c.ProjectName)
+      }
+      c.ProjectId = uint32(projectId)
+    }
 	}
 
 	v, ok = p["project_contact"]
diff --git a/src/bin/config_parser/src/config_parser/project_list_test.go b/src/bin/config_parser/src/config_parser/project_list_test.go
index 558a7ac..9fc1044 100644
--- a/src/bin/config_parser/src/config_parser/project_list_test.go
+++ b/src/bin/config_parser/src/config_parser/project_list_test.go
@@ -29,11 +29,13 @@
   projects:
   - project_name: ledger
     project_contact: ben
+    project_id: 10
     cobalt_version: 1
 - customer_name: test_project
   customer_id: 25
   projects:
   - project_name: ledger
+    project_id: 10
     project_contact: ben
     cobalt_version: 1
 `
@@ -43,7 +45,7 @@
 			CustomerName:  "fuchsia",
 			CustomerId:    20,
 			ProjectName:   "ledger",
-			ProjectId:     IdFromName("ledger"),
+			ProjectId:     10,
 			Contact:       "ben",
 			CobaltVersion: CobaltVersion1,
 		},
@@ -51,7 +53,7 @@
 			CustomerName:  "test_project",
 			CustomerId:    25,
 			ProjectName:   "ledger",
-			ProjectId:     IdFromName("ledger"),
+			ProjectId:     10,
 			Contact:       "ben",
 			CobaltVersion: CobaltVersion1,
 		},
@@ -222,6 +224,7 @@
 	y := `
 - project_name: ledger
   project_contact: ben,etienne
+  project_id: 10
   cobalt_version: 1
 - project_name: zircon
   project_contact: yvonne
@@ -236,7 +239,7 @@
 	e := []ProjectConfig{
 		ProjectConfig{
 			ProjectName:   "ledger",
-			ProjectId:     IdFromName("ledger"),
+			ProjectId:     10,
 			Contact:       "ben,etienne",
 			CobaltVersion: CobaltVersion1,
 		},
@@ -380,18 +383,6 @@
 		t.Errorf("Rejected a Cobalt version 1 project without id.: %v", err)
 	}
 
-	// Checks that Cobalt version 1 projects with an id are rejected.
-	y = `
-project_name: ledger
-project_contact: ben
-project_id: 10
-cobalt_version: 1
-`
-	c = ProjectConfig{}
-	if err := parseProjectConfigForTest(y, &c); err == nil {
-		t.Errorf("Accepted a Cobalt version 1 project with an id.")
-	}
-
 	// Checks that an error is returned if the id is an invalid type.
 	y = `
 project_name: ledger
diff --git a/src/bin/test_app/test_registry/projects.yaml b/src/bin/test_app/test_registry/projects.yaml
index b890502..8e56f71 100644
--- a/src/bin/test_app/test_registry/projects.yaml
+++ b/src/bin/test_app/test_registry/projects.yaml
@@ -3,5 +3,6 @@
 
   projects:
     - project_name: Cobalt
+      project_id: 1
       cobalt_version: 1
       project_contact: nobody@example.com
diff --git a/src/logger/test_registries/project_context_factory_test_registry/projects.yaml b/src/logger/test_registries/project_context_factory_test_registry/projects.yaml
index f71ba61..10ca118 100644
--- a/src/logger/test_registries/project_context_factory_test_registry/projects.yaml
+++ b/src/logger/test_registries/project_context_factory_test_registry/projects.yaml
@@ -2,6 +2,7 @@
   customer_id: 11
   projects:
     - project_name: Project11
+      project_id: 1
       cobalt_version: 1
       project_contact: nobody@example.com
 
@@ -9,5 +10,6 @@
   customer_id: 22
   projects:
     - project_name: Project22
+      project_id: 1
       cobalt_version: 1
       project_contact: nobody@example.com
diff --git a/src/logger/test_registries/project_context_test_registry/projects.yaml b/src/logger/test_registries/project_context_test_registry/projects.yaml
index 087b8ad..164456a 100644
--- a/src/logger/test_registries/project_context_test_registry/projects.yaml
+++ b/src/logger/test_registries/project_context_test_registry/projects.yaml
@@ -3,9 +3,11 @@
 
   projects:
     - project_name: ProjectA1
+      project_id: 1
       cobalt_version: 1
       project_contact: nobody@example.com
     - project_name: ProjectA2
+      project_id: 2
       cobalt_version: 1
       project_contact: nobody@example.com
 
@@ -14,5 +16,6 @@
 
   projects:
     - project_name: ProjectB1
+      project_id: 1
       cobalt_version: 1
       project_contact: nobody@example.com