private async Task PushTemplateSet(ContainerRegistryInfo registry, string repository, string tag)
        {
            AzureContainerRegistryClient acrClient = new AzureContainerRegistryClient(registry.Server, new AcrBasicToken(registry));

            int    schemaV2            = 2;
            string mediatypeV2Manifest = "application/vnd.docker.distribution.manifest.v2+json";
            string mediatypeV1Manifest = "application/vnd.oci.image.config.v1+json";
            string emptyConfigStr      = "{}";

            // Upload config blob
            byte[] originalConfigBytes = Encoding.UTF8.GetBytes(emptyConfigStr);
            using var originalConfigStream = new MemoryStream(originalConfigBytes);
            string originalConfigDigest = ComputeDigest(originalConfigStream);

            await UploadBlob(acrClient, originalConfigStream, repository, originalConfigDigest);

            // Upload memory blob
            using Stream byteStream = Samples.GetDefaultConversionTemplates();
            var    blobLength = byteStream.Length;
            string blobDigest = ComputeDigest(byteStream);

            await UploadBlob(acrClient, byteStream, repository, blobDigest);

            // Push manifest
            List <Descriptor> layers = new List <Descriptor>
            {
                new Descriptor("application/vnd.oci.image.layer.v1.tar", blobLength, blobDigest),
            };
            var v2Manifest = new V2Manifest(schemaV2, mediatypeV2Manifest, new Descriptor(mediatypeV1Manifest, originalConfigBytes.Length, originalConfigDigest), layers);
            await acrClient.Manifests.CreateAsync(repository, tag, v2Manifest);
        }
        private ContainerRegistryInfo GetTestContainerRegistryInfo()
        {
            var containerRegistry = new ContainerRegistryInfo
            {
                Server   = Environment.GetEnvironmentVariable("TestContainerRegistryServer"),
                Username = Environment.GetEnvironmentVariable("TestContainerRegistryServer")?.Split('.')[0],
                Password = Environment.GetEnvironmentVariable("TestContainerRegistryPassword"),
            };

            if (string.IsNullOrEmpty(containerRegistry.Server) || string.IsNullOrEmpty(containerRegistry.Password))
            {
                return(null);
            }

            return(containerRegistry);
        }
示例#3
0
        public async Task GetContainerRegistryInfoAsync_UsesCache()
        {
            var azureProxy            = GetMockAzureProxy();
            var containerRegistryInfo = new ContainerRegistryInfo {
                RegistryServer = "registryServer1", Username = "******", Password = "******"
            };

            azureProxy.Setup(a => a.GetContainerRegistryInfoAsync(It.IsAny <string>())).Returns(Task.FromResult(containerRegistryInfo));
            var cachingAzureProxy = new CachingWithRetriesAzureProxy(azureProxy.Object, cache);

            var info1 = await cachingAzureProxy.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1");

            var info2 = await cachingAzureProxy.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1");

            azureProxy.Verify(mock => mock.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1"), Times.Once());
            Assert.AreEqual(containerRegistryInfo, info1);
            Assert.AreEqual(info1, info2);
        }
示例#4
0
        public async Task GetContainerRegistryInfoAsync_NullInfo_DoesNotSetCache()
        {
            var azureProxy = GetMockAzureProxy();

            azureProxy.Setup(a => a.GetContainerRegistryInfoAsync(It.IsAny <string>())).Returns(Task.FromResult((ContainerRegistryInfo)null));
            var cachingAzureProxy = new CachingAzureProxy(azureProxy.Object, cache, new Mock <ILogger <CachingAzureProxy> >().Object);
            var info1             = await cachingAzureProxy.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1");

            var containerRegistryInfo = new ContainerRegistryInfo {
                RegistryServer = "registryServer1", Username = "******", Password = "******"
            };

            azureProxy.Setup(a => a.GetContainerRegistryInfoAsync(It.IsAny <string>())).Returns(Task.FromResult(containerRegistryInfo));
            var info2 = await cachingAzureProxy.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1");

            azureProxy.Verify(mock => mock.GetContainerRegistryInfoAsync("registryServer1/imageName1:tag1"), Times.Exactly(2));
            Assert.IsNull(info1);
            Assert.AreEqual(containerRegistryInfo, info2);
        }
 public AcrBasicToken(ContainerRegistryInfo registry)
 {
     _registry = registry;
 }