From 5ef0f5406fa0328d27a7b80a94f4aa9f38cbb545 Mon Sep 17 00:00:00 2001 From: Angel Cervera Roldan <48255007+angelcerveraroldan@users.noreply.github.com> Date: Tue, 9 Jun 2026 09:45:59 +0000 Subject: [PATCH 1/2] base/util/test: Add helper wrapper for MakeDataURL Unit tests that use pre-computed compressed data will fail in GoTip as the output of the compression function has changed. More importantly, the output is not guaranteed to be stable, so tests should now generate the zipped data at test-time, and we pre-define the expected input string. --- base/util/test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/base/util/test.go b/base/util/test.go index 61b5180e..0981dfe2 100644 --- a/base/util/test.go +++ b/base/util/test.go @@ -134,3 +134,12 @@ func verifyStruct(t *testing.T, v reflect.Value, p path.ContextPath, fieldName s // didn't find field return false } + +func CompressDataURL(t *testing.T, contents []byte) (string, string) { + t.Helper() + uri, compression, err := MakeDataURL(contents, nil, true) + if err != nil { + t.Fatalf("MakeDataURL: %v", err) + } + return uri, *compression +} From e655cc1dfd90282019b4e0c1a179e36748cf165d Mon Sep 17 00:00:00 2001 From: Angel Cervera Roldan <48255007+angelcerveraroldan@users.noreply.github.com> Date: Tue, 9 Jun 2026 09:50:01 +0000 Subject: [PATCH 2/2] */translate_test: Do not pre-compute compressed data The exact byte output of compressing functions may not be stable across different versions, so hard coding the expected byte output of the compression function will make tests fail or pass depending on the version of Go used to run the test. --- base/v0_2/translate_test.go | 27 +++++++------ base/v0_3/translate_test.go | 27 +++++++------ base/v0_4/translate_test.go | 27 +++++++------ base/v0_5/translate_test.go | 27 +++++++------ base/v0_6/translate_test.go | 27 +++++++------ base/v0_7/translate_test.go | 27 +++++++------ base/v0_8_exp/translate_test.go | 54 +++++++++++++------------- config/fcos/v1_5/translate_test.go | 23 +++++++++-- config/fcos/v1_6/translate_test.go | 23 +++++++++-- config/fcos/v1_7/translate_test.go | 23 +++++++++-- config/fcos/v1_8_exp/translate_test.go | 23 +++++++++-- 11 files changed, 194 insertions(+), 114 deletions(-) diff --git a/base/v0_2/translate_test.go b/base/v0_2/translate_test.go index e68c33b5..3d3cfbe0 100644 --- a/base/v0_2/translate_test.go +++ b/base/v0_2/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -962,6 +962,9 @@ RequiredBy=local-fs.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1109,8 +1112,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_3/translate_test.go b/base/v0_3/translate_test.go index dbda38e2..c0500dd0 100644 --- a/base/v0_3/translate_test.go +++ b/base/v0_3/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1116,6 +1116,9 @@ RequiredBy=remote-fs.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1263,8 +1266,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_4/translate_test.go b/base/v0_4/translate_test.go index 473c2ed0..42a0f9d9 100644 --- a/base/v0_4/translate_test.go +++ b/base/v0_4/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1201,6 +1201,9 @@ RequiredBy=swap.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1348,8 +1351,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_5/translate_test.go b/base/v0_5/translate_test.go index 0b0124fb..a9f2f151 100644 --- a/base/v0_5/translate_test.go +++ b/base/v0_5/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1201,6 +1201,9 @@ RequiredBy=swap.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1348,8 +1351,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_6/translate_test.go b/base/v0_6/translate_test.go index d500a33b..0ed14723 100644 --- a/base/v0_6/translate_test.go +++ b/base/v0_6/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1201,6 +1201,9 @@ RequiredBy=swap.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1348,8 +1351,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_7/translate_test.go b/base/v0_7/translate_test.go index 3be86234..03a45ce9 100644 --- a/base/v0_7/translate_test.go +++ b/base/v0_7/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1201,6 +1201,9 @@ RequiredBy=swap.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1349,8 +1352,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/base/v0_8_exp/translate_test.go b/base/v0_8_exp/translate_test.go index e23a7263..f87bbba3 100644 --- a/base/v0_8_exp/translate_test.go +++ b/base/v0_8_exp/translate_test.go @@ -56,9 +56,9 @@ func init() { // TestTranslateFile tests translating the ct storage.files.[i] entries to ignition storage.files.[i] entries. func TestTranslateFile(t *testing.T) { zzz := "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" - zzz_gz := "data:;base64,H4sIAAAAAAAC/6oajAAQAAD//5tA8d+VAAAA" + zzzURI, zzzCompression := baseutil.CompressDataURL(t, []byte(zzz)) random := "\xc0\x9cl\x01\x89i\xa5\xbfW\xe4\x1b\xf4J_\xb79P\xa3#\xa7" - random_b64 := "data:;base64,wJxsAYlppb9X5Bv0Sl+3OVCjI6c=" + randomURI, randomCompression := baseutil.CompressDataURL(t, []byte(random)) filesDir := t.TempDir() fileContents := map[string]string{ @@ -477,21 +477,21 @@ func TestTranslateFile(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, Append: []types.Resource{ { - Source: util.StrToPtr(zzz_gz), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(zzzURI), + Compression: util.StrToPtr(zzzCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { - Source: util.StrToPtr(random_b64), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(randomURI), + Compression: util.StrToPtr(randomCompression), }, { Source: util.StrToPtr("data:," + zzz), @@ -1201,6 +1201,9 @@ RequiredBy=swap.target`), // TestTranslateTree tests translating the butane storage.trees.[i] entries to ignition storage.files.[i] entries. func TestTranslateTree(t *testing.T) { + deepPath := "tree/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/file" + deepPathURI, deepPathCompression := baseutil.CompressDataURL(t, []byte(deepPath)) + tests := []struct { options *common.TranslateOptions // defaulted if not specified dirDirs map[string]os.FileMode // relative path -> mode @@ -1349,8 +1352,8 @@ func TestTranslateTree(t *testing.T) { }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/yopSk3VLy5NSsksIptKy8xJBQQAAP//gkRzjkgAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(deepPathURI), + Compression: util.StrToPtr(deepPathCompression), }, Mode: util.IntToPtr(0644), }, @@ -2529,8 +2532,6 @@ Exec=sleep infinity [Install] WantedBy=multi-user.target` - SleepContainerAsData = "data:,%5BUnit%5D%0ADescription%3DA%20sleepy%20container%0A%5BContainer%5D%0AContainerName%3Dsleepy-pod-inf%0AImage%3Dquay.io%2Ffedora%2Ffedora%0AExec%3Dsleep%20infinity%0A%5BInstall%5D%0AWantedBy%3Dmulti-user.target" - SleepContainerTemplate = `[Unit] Description=A templated sleepy container [Container] @@ -2541,10 +2542,11 @@ Exec=sleep %i Restart=always [Install] WantedBy=multi-user.target` - - SleepContainerTemplateAsData = "data:;base64,H4sIAAAAAAAC/zSNvU4DMRCE+32KlRAl4Qlc8FekBSGKk4uVb5Ks5Fsf3j2C3x6JJNWMRvPpmz5NI9MrvHRdQ5ulJw4sa5XAzF6BdXBpFqKGTtPLrWbaL3JE+t5k7LQ9HjC3Ltegt1+U9E/zvdL0gf6jBZnu+B0e0oP9MvH5BLt4+KCmfoLT9ZOknmU4TXvzkFozfYkF5ueRlq2GPmyOvgvpR8RfAAAA//91kIIEyQAAAA==" ) + sleepContainerAsData, sleepContainerCompression := baseutil.CompressDataURL(t, []byte(SleepContainer)) + sleepContainerTemplateAsData, sleepContainerTemplateCompression := baseutil.CompressDataURL(t, []byte(SleepContainerTemplate)) + filesDir := t.TempDir() fileContents := map[string]string{ "sample.container": SleepContainer, @@ -2600,8 +2602,8 @@ WantedBy=multi-user.target` }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(SleepContainerAsData), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(sleepContainerAsData), + Compression: util.StrToPtr(sleepContainerCompression), }, Mode: util.IntToPtr(0644), }, @@ -2612,8 +2614,8 @@ WantedBy=multi-user.target` }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(SleepContainerAsData), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(sleepContainerAsData), + Compression: util.StrToPtr(sleepContainerCompression), }, Mode: util.IntToPtr(0644), }, @@ -2651,8 +2653,8 @@ WantedBy=multi-user.target` }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(SleepContainerTemplateAsData), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(sleepContainerTemplateAsData), + Compression: util.StrToPtr(sleepContainerTemplateCompression), }, Mode: util.IntToPtr(0644), }, @@ -2712,8 +2714,8 @@ WantedBy=multi-user.target` }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(SleepContainerAsData), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(sleepContainerAsData), + Compression: util.StrToPtr(sleepContainerCompression), }, Mode: util.IntToPtr(0644), }, @@ -2786,8 +2788,8 @@ WantedBy=multi-user.target` }, FileEmbedded1: types.FileEmbedded1{ Contents: types.Resource{ - Source: util.StrToPtr(SleepContainerTemplateAsData), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(sleepContainerTemplateAsData), + Compression: util.StrToPtr(sleepContainerTemplateCompression), }, Mode: util.IntToPtr(0644), }, diff --git a/config/fcos/v1_5/translate_test.go b/config/fcos/v1_5/translate_test.go index bdcddcba..ba47b0f5 100644 --- a/config/fcos/v1_5/translate_test.go +++ b/config/fcos/v1_5/translate_test.go @@ -1747,6 +1747,21 @@ func TestRootPartitionConstraints(t *testing.T) { // TestTranslateGrub tests translating the Butane config Grub section. func TestTranslateGrub(t *testing.T) { + singleUserExpectedConfig := `# Generated by Butane + +set superusers="root" +password_pbkdf2 root grub.pbkdf2.sha512.10000.874A958E526409... +` + singleUserURI, singleUserCompression := baseutil.CompressDataURL(t, []byte(singleUserExpectedConfig)) + + multiUserExpectedConfig := `# Generated by Butane + +set superusers="root1 root2" +password_pbkdf2 root1 grub.pbkdf2.sha512.10000.874A958E526409... +password_pbkdf2 root2 grub.pbkdf2.sha512.10000.874B829D126209... +` + multiUserURI, multiUserCompression := baseutil.CompressDataURL(t, []byte(multiUserExpectedConfig)) + // Some tests below have the same translations translations := []translate.Translation{ {From: path.New("yaml", "version"), To: path.New("json", "ignition", "version")}, @@ -1802,8 +1817,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(singleUserURI), + Compression: util.StrToPtr(singleUserCompression), }, }, }, @@ -1850,8 +1865,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(multiUserURI), + Compression: util.StrToPtr(multiUserCompression), }, }, }, diff --git a/config/fcos/v1_6/translate_test.go b/config/fcos/v1_6/translate_test.go index a4375195..cf9cf07c 100644 --- a/config/fcos/v1_6/translate_test.go +++ b/config/fcos/v1_6/translate_test.go @@ -1747,6 +1747,21 @@ func TestRootPartitionConstraints(t *testing.T) { // TestTranslateGrub tests translating the Butane config Grub section. func TestTranslateGrub(t *testing.T) { + singleUserExpectedConfig := `# Generated by Butane + +set superusers="root" +password_pbkdf2 root grub.pbkdf2.sha512.10000.874A958E526409... +` + singleUserURI, singleUserCompression := baseutil.CompressDataURL(t, []byte(singleUserExpectedConfig)) + + multiUserExpectedConfig := `# Generated by Butane + +set superusers="root1 root2" +password_pbkdf2 root1 grub.pbkdf2.sha512.10000.874A958E526409... +password_pbkdf2 root2 grub.pbkdf2.sha512.10000.874B829D126209... +` + multiUserURI, multiUserCompression := baseutil.CompressDataURL(t, []byte(multiUserExpectedConfig)) + // Some tests below have the same translations translations := []translate.Translation{ {From: path.New("yaml", "version"), To: path.New("json", "ignition", "version")}, @@ -1802,8 +1817,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(singleUserURI), + Compression: util.StrToPtr(singleUserCompression), }, }, }, @@ -1850,8 +1865,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(multiUserURI), + Compression: util.StrToPtr(multiUserCompression), }, }, }, diff --git a/config/fcos/v1_7/translate_test.go b/config/fcos/v1_7/translate_test.go index f861e6c6..29e2fd68 100644 --- a/config/fcos/v1_7/translate_test.go +++ b/config/fcos/v1_7/translate_test.go @@ -1748,6 +1748,21 @@ func TestRootPartitionConstraints(t *testing.T) { // TestTranslateGrub tests translating the Butane config Grub section. func TestTranslateGrub(t *testing.T) { + singleUserExpectedConfig := `# Generated by Butane + +set superusers="root" +password_pbkdf2 root grub.pbkdf2.sha512.10000.874A958E526409... +` + singleUserURI, singleUserCompression := baseutil.CompressDataURL(t, []byte(singleUserExpectedConfig)) + + multiUserExpectedConfig := `# Generated by Butane + +set superusers="root1 root2" +password_pbkdf2 root1 grub.pbkdf2.sha512.10000.874A958E526409... +password_pbkdf2 root2 grub.pbkdf2.sha512.10000.874B829D126209... +` + multiUserURI, multiUserCompression := baseutil.CompressDataURL(t, []byte(multiUserExpectedConfig)) + // Some tests below have the same translations translations := []translate.Translation{ {From: path.New("yaml", "version"), To: path.New("json", "ignition", "version")}, @@ -1803,8 +1818,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(singleUserURI), + Compression: util.StrToPtr(singleUserCompression), }, }, }, @@ -1851,8 +1866,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(multiUserURI), + Compression: util.StrToPtr(multiUserCompression), }, }, }, diff --git a/config/fcos/v1_8_exp/translate_test.go b/config/fcos/v1_8_exp/translate_test.go index 1728c26f..810b3f22 100644 --- a/config/fcos/v1_8_exp/translate_test.go +++ b/config/fcos/v1_8_exp/translate_test.go @@ -1508,6 +1508,21 @@ func TestTranslateBootDevice(t *testing.T) { // TestTranslateGrub tests translating the Butane config Grub section. func TestTranslateGrub(t *testing.T) { + singleUserExpectedConfig := `# Generated by Butane + +set superusers="root" +password_pbkdf2 root grub.pbkdf2.sha512.10000.874A958E526409... +` + singleUserURI, singleUserCompression := baseutil.CompressDataURL(t, []byte(singleUserExpectedConfig)) + + multiUserExpectedConfig := `# Generated by Butane + +set superusers="root1 root2" +password_pbkdf2 root1 grub.pbkdf2.sha512.10000.874A958E526409... +password_pbkdf2 root2 grub.pbkdf2.sha512.10000.874B829D126209... +` + multiUserURI, multiUserCompression := baseutil.CompressDataURL(t, []byte(multiUserExpectedConfig)) + // Some tests below have the same translations translations := []translate.Translation{ {From: path.New("yaml", "version"), To: path.New("json", "ignition", "version")}, @@ -1563,8 +1578,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), - Compression: util.StrToPtr(""), + Source: util.StrToPtr(singleUserURI), + Compression: util.StrToPtr(singleUserCompression), }, }, }, @@ -1611,8 +1626,8 @@ func TestTranslateGrub(t *testing.T) { FileEmbedded1: types.FileEmbedded1{ Append: []types.Resource{ { - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), - Compression: util.StrToPtr("gzip"), + Source: util.StrToPtr(multiUserURI), + Compression: util.StrToPtr(multiUserCompression), }, }, },