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); }
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); }
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; }