Skip to content
This repository was archived by the owner on Dec 3, 2024. It is now read-only.

Commit 2e2bc49

Browse files
authored
Merge pull request #85 from docker/refactor--use-embedded-root-types
feat: add EmbeddedRoot type
2 parents 0336a21 + 0330ea4 commit 2e2bc49

File tree

10 files changed

+53
-40
lines changed

10 files changed

+53
-40
lines changed

internal/embed/root.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,39 @@ import (
66
)
77

88
//go:embed embedded-roots/1.root-dev.json
9-
var DevRoot []byte
9+
var devRoot []byte
1010

1111
//go:embed embedded-roots/1.root-staging.json
12-
var StagingRoot []byte
12+
var stagingRoot []byte
1313

1414
//go:embed embedded-roots/1.root.json
15-
var ProdRoot []byte
15+
var prodRoot []byte
1616

17-
var DefaultRoot = ProdRoot
17+
var defaultRoot = prodRoot
1818

19-
func GetRootBytes(root string) ([]byte, error) {
19+
type RootName string
20+
type EmbeddedRoot struct {
21+
Data []byte
22+
Name RootName
23+
}
24+
25+
var (
26+
RootDev = EmbeddedRoot{Data: devRoot, Name: "dev"}
27+
RootStaging = EmbeddedRoot{Data: stagingRoot, Name: "staging"}
28+
RootProd = EmbeddedRoot{Data: prodRoot, Name: "prod"}
29+
RootDefault = EmbeddedRoot{Data: defaultRoot, Name: ""}
30+
)
31+
32+
func GetRootFromName(root string) (*EmbeddedRoot, error) {
2033
switch root {
21-
case "dev":
22-
return DevRoot, nil
23-
case "staging":
24-
return StagingRoot, nil
25-
case "prod":
26-
return ProdRoot, nil
27-
case "":
28-
return DefaultRoot, nil
34+
case string(RootDev.Name):
35+
return &RootDev, nil
36+
case string(RootStaging.Name):
37+
return &RootStaging, nil
38+
case string(RootProd.Name):
39+
return &RootProd, nil
40+
case string(RootDefault.Name):
41+
return &RootDefault, nil
2942
default:
3043
return nil, fmt.Errorf("invalid tuf root: %s", root)
3144
}

pkg/attest/example_verify_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func createTufClient(outputPath string) (*tuf.TufClient, error) {
2121
// metadataURI := "https://docker.github.io/tuf-staging/metadata"
2222
// targetsURI := "https://docker.github.io/tuf-staging/targets"
2323

24-
return tuf.NewTufClient(embed.StagingRoot, outputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
24+
return tuf.NewTufClient(embed.RootStaging.Data, outputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
2525
}
2626

2727
func ExampleVerify_remote() {

pkg/mirror/example_mirror_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func ExampleNewTufMirror() {
2929
// configure TUF mirror
3030
metadataURI := "https://docker.github.io/tuf-staging/metadata"
3131
targetsURI := "https://docker.github.io/tuf-staging/targets"
32-
m, err := mirror.NewTufMirror(embed.StagingRoot, tufOutputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
32+
m, err := mirror.NewTufMirror(embed.RootStaging.Data, tufOutputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
3333
if err != nil {
3434
panic(err)
3535
}

pkg/mirror/metadata_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func TestGetTufMetadataMirror(t *testing.T) {
2121
defer server.Close()
2222

2323
path := test.CreateTempDir(t, "", "tuf_temp")
24-
m, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
24+
m, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
2525
assert.NoError(t, err)
2626

2727
tufMetadata, err := m.getTufMetadataMirror(server.URL + "/metadata")
@@ -39,7 +39,7 @@ func TestGetMetadataManifest(t *testing.T) {
3939
defer server.Close()
4040

4141
path := test.CreateTempDir(t, "", "tuf_temp")
42-
m, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
42+
m, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
4343
assert.NoError(t, err)
4444

4545
img, err := m.GetMetadataManifest(server.URL + "/metadata")
@@ -78,7 +78,7 @@ func TestGetDelegatedMetadataMirrors(t *testing.T) {
7878
defer server.Close()
7979

8080
path := test.CreateTempDir(t, "", "tuf_temp")
81-
m, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
81+
m, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
8282
assert.NoError(t, err)
8383

8484
delegations, err := m.GetDelegatedMetadataMirrors()

pkg/mirror/mirror.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
func NewTufMirror(root []byte, tufPath, metadataURL, targetsURL string, versionChecker tuf.VersionChecker) (*TufMirror, error) {
1818
if root == nil {
19-
root = embed.DefaultRoot
19+
root = embed.RootDefault.Data
2020
}
2121
tufClient, err := tuf.NewTufClient(root, tufPath, metadataURL, targetsURL, versionChecker)
2222
if err != nil {

pkg/mirror/targets_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestGetTufTargetsMirror(t *testing.T) {
2727
defer server.Close()
2828

2929
path := test.CreateTempDir(t, "", "tuf_temp")
30-
m, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
30+
m, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
3131
assert.NoError(t, err)
3232

3333
targets, err := m.GetTufTargetMirrors()
@@ -61,7 +61,7 @@ func TestTargetDelegationMetadata(t *testing.T) {
6161
defer server.Close()
6262

6363
path := test.CreateTempDir(t, "", "tuf_temp")
64-
tm, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
64+
tm, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
6565
assert.NoError(t, err)
6666

6767
targets, err := tm.TufClient.LoadDelegatedTargets("test-role", "targets")
@@ -74,7 +74,7 @@ func TestGetDelegatedTargetMirrors(t *testing.T) {
7474
defer server.Close()
7575

7676
path := test.CreateTempDir(t, "", "tuf_temp")
77-
m, err := NewTufMirror(embed.DevRoot, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
77+
m, err := NewTufMirror(embed.RootDev.Data, path, server.URL+"/metadata", server.URL+"/targets", tuf.NewMockVersionChecker())
7878
assert.NoError(t, err)
7979

8080
mirrors, err := m.GetDelegatedTargetMirrors()

pkg/tuf/example_registry_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func ExampleNewTufClient_registry() {
2121
metadataURI := "registry-1.docker.io/docker/tuf-metadata:latest"
2222
targetsURI := "registry-1.docker.io/docker/tuf-targets"
2323

24-
registryClient, err := tuf.NewTufClient(embed.StagingRoot, tufOutputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
24+
registryClient, err := tuf.NewTufClient(embed.RootStaging.Data, tufOutputPath, metadataURI, targetsURI, tuf.NewMockVersionChecker())
2525
if err != nil {
2626
panic(err)
2727
}

pkg/tuf/registry_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestRegistryFetcher(t *testing.T) {
5252
delegatedDir := CreateTempDir(t, dir, delegatedRole)
5353
delegatedTargetFile := fmt.Sprintf("%s/%s", delegatedRole, targetFile)
5454

55-
cfg, err := config.New(metadataRepo, embed.DevRoot)
55+
cfg, err := config.New(metadataRepo, embed.RootDev.Data)
5656
assert.NoError(t, err)
5757

5858
cfg.Fetcher = NewRegistryFetcher(metadataRepo, metadataImgTag, targetsRepo)

pkg/tuf/tuf.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ func ensureTrailingSlash(url string) string {
229229
return url + "/"
230230
}
231231

232-
// GetEmbeddedTufRootBytes returns the embedded TUF root based on the given root name
233-
func GetEmbeddedTufRootBytes(root string) ([]byte, error) {
234-
return embed.GetRootBytes(root)
232+
// GetEmbeddedTufRoot returns the embedded TUF root based on the given root name
233+
func GetEmbeddedTufRoot(root string) (*embed.EmbeddedRoot, error) {
234+
return embed.GetRootFromName(root)
235235
}

pkg/tuf/tuf_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,17 @@ func TestRootInit(t *testing.T) {
6565
}
6666

6767
for _, tc := range testCases {
68-
_, err := NewTufClient(embed.DevRoot, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
68+
_, err := NewTufClient(embed.RootDev.Data, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
6969
assert.NoErrorf(t, err, "Failed to create TUF client: %v", err)
7070

7171
// recreation should work with same root
72-
_, err = NewTufClient(embed.DevRoot, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
72+
_, err = NewTufClient(embed.RootDev.Data, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
7373
assert.NoErrorf(t, err, "Failed to recreate TUF client: %v", err)
7474

7575
_, err = NewTufClient([]byte("broken"), tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
7676
assert.Errorf(t, err, "Expected error recreating TUF client with broken root: %v", err)
7777

78-
_, err = NewTufClient(embed.DevRoot, tufPath, tc.metadataSource, tc.targetsSource, alwaysBadVersionChecker)
78+
_, err = NewTufClient(embed.RootDev.Data, tufPath, tc.metadataSource, tc.targetsSource, alwaysBadVersionChecker)
7979
assert.Errorf(t, err, "Expected error creating TUF client with bad attest version: %v", err)
8080
}
8181
}
@@ -111,7 +111,7 @@ func TestDownloadTarget(t *testing.T) {
111111
}
112112

113113
for _, tc := range testCases {
114-
tufClient, err := NewTufClient(embed.DevRoot, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
114+
tufClient, err := NewTufClient(embed.RootDev.Data, tufPath, tc.metadataSource, tc.targetsSource, alwaysGoodVersionChecker)
115115
assert.NoErrorf(t, err, "Failed to create TUF client: %v", err)
116116

117117
// get trusted tuf metadata
@@ -135,22 +135,22 @@ func TestDownloadTarget(t *testing.T) {
135135
}
136136

137137
func TestGetEmbeddedTufRootBytes(t *testing.T) {
138-
dev, err := GetEmbeddedTufRootBytes("dev")
138+
dev, err := GetEmbeddedTufRoot("dev")
139139
assert.NoError(t, err)
140140

141-
staging, err := GetEmbeddedTufRootBytes("staging")
141+
staging, err := GetEmbeddedTufRoot("staging")
142142
assert.NoError(t, err)
143-
assert.NotEqual(t, dev, staging)
143+
assert.NotEqual(t, dev.Data, staging.Data)
144144

145-
prod, err := GetEmbeddedTufRootBytes("prod")
145+
prod, err := GetEmbeddedTufRoot("prod")
146146
assert.NoError(t, err)
147-
assert.NotEqual(t, dev, prod)
148-
assert.NotEqual(t, staging, prod)
147+
assert.NotEqual(t, dev.Data, prod.Data)
148+
assert.NotEqual(t, staging.Data, prod.Data)
149149

150-
def, err := GetEmbeddedTufRootBytes("")
150+
def, err := GetEmbeddedTufRoot("")
151151
assert.NoError(t, err)
152-
assert.Equal(t, def, prod)
152+
assert.Equal(t, def.Data, prod.Data)
153153

154-
_, err = GetEmbeddedTufRootBytes("invalid")
154+
_, err = GetEmbeddedTufRoot("invalid")
155155
assert.Error(t, err)
156156
}

0 commit comments

Comments
 (0)