Skip to content

Commit f78b5ce

Browse files
authored
Fix regression in metadata.toml rendering (#946)
* Fix regression in metadata.toml rendering Moved the dynamic process serialization to a new field type and off of process. The TOML that was previously generated was not expected and the TOML library we use doesn't seem to have a way to render the table the way we expect. Making a new type for the single field `command` allows us to render the TOML the way we want. Fixes: #945 Signed-off-by: Jesse Brown <jabrown85@gmail.com> * Changes requested from pull request - Minor reorganization of the code - Fixed typos - Removed some redundant checks in one test to not muddy the waters on what is being tested - Updated some comments - Removed debug code Signed-off-by: Jesse Brown <jabrown85@gmail.com> Signed-off-by: Jesse Brown <jabrown85@gmail.com>
1 parent 5a4df34 commit f78b5ce

14 files changed

Lines changed: 310 additions & 261 deletions

acceptance/builder_test.go

Lines changed: 74 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,77 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
130130
),
131131
)
132132
// check builder metadata.toml for success test
133-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
133+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
134134

135135
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
136136
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world")
137137
h.AssertStringContains(t, md.Buildpacks[0].Version, "0.0.1")
138-
h.AssertEq(t, 1, len(md.Processes))
139-
h.AssertEq(t, "hello", md.Processes[0].Type)
140-
h.AssertEq(t, "echo world", md.Processes[0].Command[0])
141-
h.AssertEq(t, 1, len(md.Processes[0].Args))
142-
h.AssertEq(t, "arg1", md.Processes[0].Args[0])
143-
h.AssertEq(t, false, md.Processes[0].Direct)
144-
h.AssertEq(t, "", md.Processes[0].WorkingDirectory)
145-
h.AssertEq(t, false, md.Processes[0].Default)
138+
})
139+
})
140+
141+
when("writing metadata.toml", func() {
142+
it("writes and reads successfully", func() {
143+
h.DockerRunAndCopy(t,
144+
containerName,
145+
copyDir,
146+
ctrPath("/layers"),
147+
builderImage,
148+
h.WithFlags(
149+
"--env", "CNB_PLATFORM_API="+latestPlatformAPI,
150+
"--env", "CNB_GROUP_PATH=/cnb/group_tomls/always_detect_group.toml",
151+
"--env", "CNB_PLAN_PATH=/cnb/plan_tomls/always_detect_plan.toml",
152+
),
153+
)
154+
// check builder metadata.toml for success test
155+
contents, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
156+
157+
// prevent regression of inline table serialization
158+
h.AssertStringDoesNotContain(t, contents, "processes =")
159+
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
160+
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world")
161+
h.AssertStringContains(t, md.Buildpacks[0].Version, "0.0.1")
162+
h.AssertEq(t, len(md.Processes), 1)
163+
h.AssertEq(t, md.Processes[0].Type, "hello")
164+
h.AssertEq(t, len(md.Processes[0].Command.Entries), 1)
165+
h.AssertEq(t, md.Processes[0].Command.Entries[0], "echo world")
166+
h.AssertEq(t, len(md.Processes[0].Args), 1)
167+
h.AssertEq(t, md.Processes[0].Args[0], "arg1")
168+
h.AssertEq(t, md.Processes[0].Direct, false)
169+
h.AssertEq(t, md.Processes[0].WorkingDirectory, "")
170+
h.AssertEq(t, md.Processes[0].Default, false)
171+
})
172+
173+
when("the platform < 0.10", func() {
174+
it("writes and reads successfully", func() {
175+
h.DockerRunAndCopy(t,
176+
containerName,
177+
copyDir,
178+
ctrPath("/layers"),
179+
builderImage,
180+
h.WithFlags(
181+
"--env", "CNB_PLATFORM_API=0.9",
182+
"--env", "CNB_GROUP_PATH=/cnb/group_tomls/always_detect_group.toml",
183+
"--env", "CNB_PLAN_PATH=/cnb/plan_tomls/always_detect_plan.toml",
184+
),
185+
)
186+
// check builder metadata.toml for success test
187+
contents, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
188+
189+
// prevent regression of inline table serialization
190+
h.AssertStringDoesNotContain(t, contents, "processes =")
191+
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
192+
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world")
193+
h.AssertStringContains(t, md.Buildpacks[0].Version, "0.0.1")
194+
h.AssertEq(t, len(md.Processes), 1)
195+
h.AssertEq(t, md.Processes[0].Type, "hello")
196+
h.AssertEq(t, len(md.Processes[0].Command.Entries), 1)
197+
h.AssertEq(t, md.Processes[0].Command.Entries[0], "echo world")
198+
h.AssertEq(t, len(md.Processes[0].Args), 1)
199+
h.AssertEq(t, md.Processes[0].Args[0], "arg1")
200+
h.AssertEq(t, md.Processes[0].Direct, false)
201+
h.AssertEq(t, md.Processes[0].WorkingDirectory, "")
202+
h.AssertEq(t, md.Processes[0].Default, false)
203+
})
146204
})
147205
})
148206

@@ -160,7 +218,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
160218
),
161219
)
162220
// check builder metadata.toml for success test
163-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
221+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
164222

165223
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
166224
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world")
@@ -206,7 +264,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
206264
),
207265
)
208266
// check builder metadata.toml for success test
209-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
267+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
210268
h.AssertEq(t, len(md.Processes), 0)
211269
})
212270
})
@@ -282,7 +340,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
282340
),
283341
)
284342
// check builder metadata.toml for success test
285-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
343+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers", "config", "metadata.toml"))
286344

287345
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
288346
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world")
@@ -325,7 +383,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
325383
"--env", "CNB_PLAN_PATH=/cnb/plan_tomls/always_detect_plan_buildpack_2.toml",
326384
),
327385
)
328-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers/different_layer_dir_from_env/config/metadata.toml"))
386+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers/different_layer_dir_from_env/config/metadata.toml"))
329387

330388
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
331389
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world_2")
@@ -347,7 +405,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
347405
"--env", "CNB_GROUP_PATH=/cnb/group_tomls/always_detect_group_buildpack2.toml",
348406
),
349407
)
350-
md := getBuilderMetadata(t, filepath.Join(copyDir, "layers/different_layer_dir_from_env/config/metadata.toml"))
408+
_, md := getBuilderMetadata(t, filepath.Join(copyDir, "layers/different_layer_dir_from_env/config/metadata.toml"))
351409

352410
h.AssertStringContains(t, md.Buildpacks[0].API, "0.2")
353411
h.AssertStringContains(t, md.Buildpacks[0].ID, "hello_world_2")
@@ -451,7 +509,7 @@ func testBuilder(t *testing.T, when spec.G, it spec.S) {
451509
})
452510
}
453511

454-
func getBuilderMetadata(t *testing.T, path string) *platform.BuildMetadata {
512+
func getBuilderMetadata(t *testing.T, path string) (string, *platform.BuildMetadata) {
455513
t.Helper()
456514
contents, _ := os.ReadFile(path)
457515
h.AssertEq(t, len(contents) > 0, true)
@@ -460,5 +518,5 @@ func getBuilderMetadata(t *testing.T, path string) *platform.BuildMetadata {
460518
_, err := toml.Decode(string(contents), &buildMD)
461519
h.AssertNil(t, err)
462520

463-
return &buildMD
521+
return string(contents), &buildMD
464522
}

0 commit comments

Comments
 (0)