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  }