github.com/uber/kraken@v0.1.4/lib/backend/testfs/server_test.go (about) 1 // Copyright (c) 2016-2019 Uber Technologies, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 package testfs 15 16 import ( 17 "bytes" 18 "testing" 19 20 "github.com/uber/kraken/core" 21 "github.com/uber/kraken/lib/backend/backenderrors" 22 "github.com/uber/kraken/lib/backend/namepath" 23 "github.com/uber/kraken/utils/testutil" 24 25 "github.com/stretchr/testify/require" 26 ) 27 28 func TestServerBlob(t *testing.T) { 29 require := require.New(t) 30 31 s := NewServer() 32 defer s.Cleanup() 33 34 addr, stop := testutil.StartServer(s.Handler()) 35 defer stop() 36 37 c, err := NewClient(Config{Addr: addr, NamePath: namepath.Identity}) 38 require.NoError(err) 39 40 blob := core.NewBlobFixture() 41 ns := core.NamespaceFixture() 42 43 _, err = c.Stat(ns, blob.Digest.Hex()) 44 require.Equal(backenderrors.ErrBlobNotFound, err) 45 46 require.NoError(c.Upload(ns, blob.Digest.Hex(), bytes.NewReader(blob.Content))) 47 48 var b bytes.Buffer 49 require.NoError(c.Download(ns, blob.Digest.Hex(), &b)) 50 require.Equal(blob.Content, b.Bytes()) 51 52 info, err := c.Stat(ns, blob.Digest.Hex()) 53 require.NoError(err) 54 require.Equal(int64(len(blob.Content)), info.Size) 55 } 56 57 func TestServerTag(t *testing.T) { 58 require := require.New(t) 59 60 s := NewServer() 61 defer s.Cleanup() 62 63 addr, stop := testutil.StartServer(s.Handler()) 64 defer stop() 65 66 c, err := NewClient(Config{Addr: addr, NamePath: namepath.Identity}) 67 require.NoError(err) 68 69 ns := core.NamespaceFixture() 70 tag := "repo-bar:latest" 71 d := core.DigestFixture().String() 72 73 require.NoError(c.Upload(ns, tag, bytes.NewBufferString(d))) 74 75 var b bytes.Buffer 76 require.NoError(c.Download(ns, tag, &b)) 77 require.Equal(d, b.String()) 78 } 79 80 func TestServerList(t *testing.T) { 81 tests := []struct { 82 desc string 83 prefix string 84 expected []string 85 }{ 86 {"root", "", []string{"a/b/c.txt", "a/b/d.txt", "x/y/z.txt"}}, 87 {"dir", "a", []string{"a/b/c.txt", "a/b/d.txt"}}, 88 {"file", "a/b/c.txt", nil}, 89 } 90 for _, test := range tests { 91 t.Run(test.desc, func(t *testing.T) { 92 require := require.New(t) 93 94 s := NewServer() 95 defer s.Cleanup() 96 97 addr, stop := testutil.StartServer(s.Handler()) 98 defer stop() 99 100 ns := core.NamespaceFixture() 101 c, err := NewClient(Config{Addr: addr, Root: "root", NamePath: namepath.Identity}) 102 require.NoError(err) 103 104 require.NoError(c.Upload(ns, "a/b/c.txt", bytes.NewBufferString("foo"))) 105 require.NoError(c.Upload(ns, "a/b/d.txt", bytes.NewBufferString("bar"))) 106 require.NoError(c.Upload(ns, "x/y/z.txt", bytes.NewBufferString("baz"))) 107 108 result, err := c.List(test.prefix) 109 require.NoError(err) 110 require.ElementsMatch(test.expected, result.Names) 111 }) 112 } 113 } 114 115 func TestDockerTagList(t *testing.T) { 116 require := require.New(t) 117 118 s := NewServer() 119 defer s.Cleanup() 120 121 addr, stop := testutil.StartServer(s.Handler()) 122 defer stop() 123 124 c, err := NewClient(Config{Addr: addr, Root: "tags", NamePath: namepath.DockerTag}) 125 require.NoError(err) 126 127 ns := core.NamespaceFixture() 128 tags := []string{"foo:v0", "foo:latest", "bar:v0", "bar/baz:v0"} 129 for _, tag := range tags { 130 require.NoError(c.Upload(ns, tag, bytes.NewBufferString(core.DigestFixture().String()))) 131 } 132 133 result, err := c.List("") 134 require.NoError(err) 135 require.ElementsMatch(tags, result.Names) 136 }