github.com/ggreg80/ketos@v0.0.0-20171109040536-049616f51ddb/pkg/registry/test/registry_test.go (about)

     1  package test
     2  
     3  import (
     4  	"github.com/setekhid/ketos/pkg/registry"
     5  	"github.com/stretchr/testify/assert"
     6  	"github.com/stretchr/testify/require"
     7  	"os"
     8  	"testing"
     9  )
    10  
    11  func TestRegistryBasicUsage(t *testing.T) {
    12  
    13  	if testing.Short() {
    14  		t.SkipNow()
    15  	}
    16  
    17  	// two image repository, local and remote
    18  	image := registry.DockerImage("alpine:3.6")
    19  	image0 := registry.DockerImage("localhost:5000/tasting/alpine:3.6")
    20  
    21  	// connecting registries
    22  	repo, tag, err := image.Connect()
    23  	require.NoError(t, err)
    24  	repo0, tag0, err := image0.Connect()
    25  	require.NoError(t, err)
    26  
    27  	assert.Equal(t, tag, tag0)
    28  	assert.Equal(t, tag, "3.6")
    29  
    30  	// get manifest from remote
    31  	manifest, err := repo.GetManifest(tag)
    32  	require.NoError(t, err)
    33  
    34  	// transmit layers
    35  	for _, layer := range manifest.FSLayers {
    36  
    37  		func() {
    38  
    39  			pipeR, pipeW, err := os.Pipe()
    40  			require.NoError(t, err)
    41  			defer pipeR.Close()
    42  
    43  			go func() {
    44  				defer pipeW.Close()
    45  
    46  				err = repo.GetLayer(layer.BlobSum, pipeW)
    47  				require.NoError(t, err)
    48  			}()
    49  
    50  			err = repo0.PutLayer(layer.BlobSum, pipeR)
    51  			require.NoError(t, err)
    52  		}()
    53  	}
    54  
    55  	// put manifest to local
    56  	err = repo0.PutManifest(tag, manifest)
    57  	require.NoError(t, err)
    58  }