public void TestReadListOfJson() { SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/basic_list.json").ToURI()); string jsonString = Encoding.UTF8.GetString(Files.ReadAllBytes(jsonFile)); IList <TestJson> listofJsons = JsonTemplateMapper.ReadListOfJson <TestJson>(jsonString); TestJson json1 = listofJsons[0]; TestJson json2 = listofJsons[1]; DescriptorDigest digest1 = DescriptorDigest.FromDigest( "sha256:91e0cae00b86c289b33fee303a807ae72dd9f0315c16b74e6ab0cdbe9d996c10"); DescriptorDigest digest2 = DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"); Assert.AreEqual(1, json1.Number); Assert.AreEqual(2, json2.Number); Assert.AreEqual("text1", json1.Text); Assert.AreEqual("text2", json2.Text); Assert.AreEqual(digest1, json1.Digest); Assert.AreEqual(digest2, json2.Digest); Assert.AreEqual(10, json1.InnerObject.Number); Assert.AreEqual(20, json2.InnerObject.Number); Assert.AreEqual(2, json1.List.Count); Assert.IsTrue(json2.List.Count == 0); }
public void TestReadJsonWithLock() { SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/basic.json").ToURI()); // Deserializes into a metadata JSON object. TestJson testJson = JsonTemplateMapper.ReadJsonFromFileWithLock <TestJson>(jsonFile); Assert.AreEqual(testJson.Number, 54); Assert.AreEqual(testJson.Text, "crepecake"); Assert.AreEqual( testJson.Digest, DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad")); Assert.IsInstanceOf <TestJson.InnerObjectClass>(testJson.InnerObject); Assert.AreEqual(testJson.InnerObject.Number, 23); Assert.AreEqual( testJson.InnerObject.Texts, new[] { "first text", "second text" }); Assert.AreEqual(testJson.InnerObject.Digests, new[] { DescriptorDigest.FromDigest("sha256:91e0cae00b86c289b33fee303a807ae72dd9f0315c16b74e6ab0cdbe9d996c10"), DescriptorDigest.FromHash("4945ba5011739b0b98c4a41afe224e417f47c7c99b2ce76830999c9a0861b236") }); // ignore testJson.list }
public void TestToJson() { // Loads the expected JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/containerconfig.json").ToURI()); string expectedJson = Encoding.UTF8.GetString(Files.ReadAllBytes(jsonFile)); // Creates the JSON object to serialize. ContainerConfigurationTemplate containerConfigJson = new ContainerConfigurationTemplate { Created = "1970-01-01T00:00:20Z", Architecture = "wasm", Os = "js" }; containerConfigJson.SetContainerEnvironment(new[] { "VAR1=VAL1", "VAR2=VAL2" }); containerConfigJson.SetContainerEntrypoint(new[] { "some", "entrypoint", "command" }); containerConfigJson.SetContainerCmd(new[] { "arg1", "arg2" }); containerConfigJson.SetContainerHealthCheckTest(new[] { "CMD-SHELL", "/checkhealth" }); containerConfigJson.SetContainerHealthCheckInterval(3000000000L); containerConfigJson.SetContainerHealthCheckTimeout(1000000000L); containerConfigJson.SetContainerHealthCheckStartPeriod(2000000000L); containerConfigJson.SetContainerHealthCheckRetries(3); containerConfigJson.SetContainerExposedPorts( new Dictionary <string, IDictionary <object, object> > { ["1000/tcp"] = ImmutableDictionary.Create <object, object>(), ["2000/tcp"] = ImmutableDictionary.Create <object, object>(), ["3000/udp"] = ImmutableDictionary.Create <object, object>() }.ToImmutableSortedDictionary()); containerConfigJson.SetContainerLabels(ImmutableDic.Of("key1", "value1", "key2", "value2")); containerConfigJson.SetContainerVolumes( ImmutableDic.Of <string, IDictionary <object, object> >( "/var/job-result-data", ImmutableDictionary.Create <object, object>(), "/var/log/my-app-logs", ImmutableDictionary.Create <object, object>())); containerConfigJson.SetContainerWorkingDir("/some/workspace"); containerConfigJson.SetContainerUser("tomcat"); containerConfigJson.AddLayerDiffId( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad")); containerConfigJson.AddHistoryEntry( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(0)) .SetAuthor("Bazel") .SetCreatedBy("bazel build ...") .SetEmptyLayer(true) .Build()); containerConfigJson.AddHistoryEntry( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(20)) .SetAuthor("Fib") .SetCreatedBy("fib") .Build()); // Serializes the JSON object. Assert.AreEqual(expectedJson, JsonTemplateMapper.ToUtf8String(containerConfigJson)); }
public void TestCreateFromDigest_pass() { string goodHash = CreateGoodHash('a'); string goodDigest = "sha256:" + CreateGoodHash('a'); DescriptorDigest descriptorDigest = DescriptorDigest.FromDigest(goodDigest); Assert.AreEqual(goodHash, descriptorDigest.GetHash()); Assert.AreEqual(goodDigest, descriptorDigest.ToString()); }
public void TestFromJson() { // Loads the JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/containerconfig.json").ToURI()); // Deserializes into a manifest JSON object. ContainerConfigurationTemplate containerConfigJson = JsonTemplateMapper.ReadJsonFromFile <ContainerConfigurationTemplate>(jsonFile); Assert.AreEqual("1970-01-01T00:00:20Z", containerConfigJson.Created); Assert.AreEqual("wasm", containerConfigJson.Architecture); Assert.AreEqual("js", containerConfigJson.Os); Assert.AreEqual( new[] { "VAR1=VAL1", "VAR2=VAL2" }, containerConfigJson.GetContainerEnvironment()); Assert.AreEqual( new[] { "some", "entrypoint", "command" }, containerConfigJson.GetContainerEntrypoint()); Assert.AreEqual(new[] { "arg1", "arg2" }, containerConfigJson.GetContainerCmd()); Assert.AreEqual( new[] { "CMD-SHELL", "/checkhealth" }, containerConfigJson.GetContainerHealthTest()); Assert.IsNotNull(containerConfigJson.GetContainerHealthInterval()); Assert.AreEqual(3000000000L, containerConfigJson.GetContainerHealthInterval().GetValueOrDefault()); Assert.IsNotNull(containerConfigJson.GetContainerHealthTimeout()); Assert.AreEqual(1000000000L, containerConfigJson.GetContainerHealthTimeout().GetValueOrDefault()); Assert.IsNotNull(containerConfigJson.GetContainerHealthStartPeriod()); Assert.AreEqual( 2000000000L, containerConfigJson.GetContainerHealthStartPeriod().GetValueOrDefault()); Assert.IsNotNull(containerConfigJson.GetContainerHealthRetries()); Assert.AreEqual(3, containerConfigJson.GetContainerHealthRetries().GetValueOrDefault()); Assert.AreEqual( ImmutableDic.Of("key1", "value1", "key2", "value2"), containerConfigJson.GetContainerLabels()); Assert.AreEqual("/some/workspace", containerConfigJson.GetContainerWorkingDir()); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), containerConfigJson.GetLayerDiffId(0)); Assert.AreEqual( ImmutableArray.Create( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(0)) .SetAuthor("Bazel") .SetCreatedBy("bazel build ...") .SetEmptyLayer(true) .Build(), HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(20)) .SetAuthor("Fib") .SetCreatedBy("fib") .Build()), containerConfigJson.History); }
public void SetUp() { digest1 = DescriptorDigest.FromDigest( "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"); digest2 = DescriptorDigest.FromDigest( "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); id = DescriptorDigest.FromDigest( "sha256:9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba"); }
public void TestCreateFromDigest_fail() { const string badDigest = "sha256:not a valid digest"; try { DescriptorDigest.FromDigest(badDigest); Assert.Fail("Invalid digest should have caused digest creation failure."); } catch (DigestException ex) { Assert.AreEqual("Invalid digest: " + badDigest, ex.Message); } }
public void TestWriteJson() { SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/basic.json").ToURI()); string expectedJson = Encoding.UTF8.GetString(Files.ReadAllBytes(jsonFile)); TestJson testJson = new TestJson { Number = 54, Text = "crepecake", Digest = DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), InnerObject = new TestJson.InnerObjectClass { Number = 23, Texts = new List <string> { "first text", "second text" }, Digests = new[] { DescriptorDigest.FromDigest( "sha256:91e0cae00b86c289b33fee303a807ae72dd9f0315c16b74e6ab0cdbe9d996c10"), DescriptorDigest.FromHash( "4945ba5011739b0b98c4a41afe224e417f47c7c99b2ce76830999c9a0861b236") } } }; TestJson.InnerObjectClass innerObject1 = new TestJson.InnerObjectClass { Number = 42, Texts = new List <string>() }; TestJson.InnerObjectClass innerObject2 = new TestJson.InnerObjectClass { Number = 99, Texts = new List <string> { "some text" }, Digests = new List <DescriptorDigest> { DescriptorDigest.FromDigest( "sha256:d38f571aa1c11e3d516e0ef7e513e7308ccbeb869770cb8c4319d63b10a0075e") } }; testJson.List = new[] { innerObject1, innerObject2 }; Assert.AreEqual(expectedJson, JsonTemplateMapper.ToUtf8String(testJson)); }
//private static DescriptorDigest fakeDigest = DescriptorDigest.fromHash(new string('a', 64)); private void SetUp(ManifestFormat imageFormat) { Image.Builder testImageBuilder = Image.CreateBuilder(imageFormat) .SetCreated(Instant.FromUnixTimeSeconds(20)) .SetArchitecture("wasm") .SetOs("js") .AddEnvironmentVariable("VAR1", "VAL1") .AddEnvironmentVariable("VAR2", "VAL2") .SetEntrypoint(new[] { "some", "entrypoint", "command" }) .SetProgramArguments(new[] { "arg1", "arg2" }) .SetHealthCheck( DockerHealthCheck.FromCommand(ImmutableArray.Create("CMD-SHELL", "/checkhealth")) .SetInterval(Duration.FromSeconds(3)) .SetTimeout(Duration.FromSeconds(1)) .SetStartPeriod(Duration.FromSeconds(2)) .SetRetries(3) .Build()) .AddExposedPorts(ImmutableHashSet.Create(Port.Tcp(1000), Port.Tcp(2000), Port.Udp(3000))) .AddVolumes( ImmutableHashSet.Create( AbsoluteUnixPath.Get("/var/job-result-data"), AbsoluteUnixPath.Get("/var/log/my-app-logs"))) .AddLabels(ImmutableDic.Of("key1", "value1", "key2", "value2")) .SetWorkingDirectory("/some/workspace") .SetUser("tomcat"); DescriptorDigest fakeDigest = DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"); testImageBuilder.AddLayer( new FakeLayer(fakeDigest)); testImageBuilder.AddHistory( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(0)) .SetAuthor("Bazel") .SetCreatedBy("bazel build ...") .SetEmptyLayer(true) .Build()); testImageBuilder.AddHistory( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(20)) .SetAuthor("Fib") .SetCreatedBy("fib") .Build()); imageToJsonTranslator = new ImageToJsonTranslator(testImageBuilder.Build()); }
public void TestToJson() { // Loads the expected JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/ocimanifest.json").ToURI()); string expectedJson = Encoding.UTF8.GetString(Files.ReadAllBytes(jsonFile)); // Creates the JSON object to serialize. OCIManifestTemplate manifestJson = new OCIManifestTemplate(); manifestJson.SetContainerConfiguration( 1000, DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad")); manifestJson.AddLayer( 1000_000, DescriptorDigest.FromHash( "4945ba5011739b0b98c4a41afe224e417f47c7c99b2ce76830999c9a0861b236")); // Serializes the JSON object. Assert.AreEqual(expectedJson, JsonTemplateMapper.ToUtf8String(manifestJson)); }
public void TestFromJson() { // Loads the JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/ocimanifest.json").ToURI()); // Deserializes into a manifest JSON object. OCIManifestTemplate manifestJson = JsonTemplateMapper.ReadJsonFromFile <OCIManifestTemplate>(jsonFile); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), manifestJson.GetContainerConfiguration().Digest); Assert.AreEqual(1000, manifestJson.GetContainerConfiguration().Size); Assert.AreEqual( DescriptorDigest.FromHash( "4945ba5011739b0b98c4a41afe224e417f47c7c99b2ce76830999c9a0861b236"), manifestJson.Layers[0].Digest); Assert.AreEqual(1000_000, manifestJson.Layers[0].Size); }
public void TestFromJson() { // Loads the JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/v21manifest.json").ToURI()); // Deserializes into a manifest JSON object. V21ManifestTemplate manifestJson = JsonTemplateMapper.ReadJsonFromFile <V21ManifestTemplate>(jsonFile); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), manifestJson.FsLayers[0].GetDigest()); ContainerConfigurationTemplate containerConfiguration = manifestJson.GetContainerConfiguration().OrElse(null); Assert.AreEqual( new[] { "JAVA_HOME=/opt/openjdk", "PATH=/opt/openjdk/bin" }, containerConfiguration.GetContainerEnvironment()); Assert.AreEqual( new[] { "/opt/openjdk/bin/java" }, containerConfiguration.GetContainerEntrypoint()); }
public void TestUseAsMapKey() { DescriptorDigest descriptorDigestA1 = DescriptorDigest.FromHash(CreateGoodHash('a')); DescriptorDigest descriptorDigestA2 = DescriptorDigest.FromHash(CreateGoodHash('a')); DescriptorDigest descriptorDigestA3 = DescriptorDigest.FromDigest("sha256:" + CreateGoodHash('a')); DescriptorDigest descriptorDigestB = DescriptorDigest.FromHash(CreateGoodHash('b')); IDictionary <DescriptorDigest, string> digestMap = new Dictionary <DescriptorDigest, string> { [descriptorDigestA1] = "digest with a" }; Assert.AreEqual("digest with a", digestMap[descriptorDigestA1]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA2]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA3]); Assert.IsFalse(digestMap.ContainsKey(descriptorDigestB)); digestMap[descriptorDigestA2] = "digest with a"; Assert.AreEqual("digest with a", digestMap[descriptorDigestA1]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA2]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA3]); Assert.IsFalse(digestMap.ContainsKey(descriptorDigestB)); digestMap[descriptorDigestA3] = "digest with a"; Assert.AreEqual("digest with a", digestMap[descriptorDigestA1]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA2]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA3]); Assert.IsFalse(digestMap.ContainsKey(descriptorDigestB)); digestMap[descriptorDigestB] = "digest with b"; Assert.AreEqual("digest with a", digestMap[descriptorDigestA1]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA2]); Assert.AreEqual("digest with a", digestMap[descriptorDigestA3]); Assert.AreEqual("digest with b", digestMap[descriptorDigestB]); }
public void TestToImage_v21() { // Loads the JSON string. SystemPath jsonFile = Paths.Get(TestResources.GetResource("core/json/v21manifest.json").ToURI()); // Deserializes into a manifest JSON object. V21ManifestTemplate manifestTemplate = JsonTemplateMapper.ReadJsonFromFile <V21ManifestTemplate>(jsonFile); Image image = JsonToImageTranslator.ToImage(manifestTemplate); IList <ILayer> layers = image.GetLayers(); Assert.AreEqual(2, layers.Count); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:5bd451067f9ab05e97cda8476c82f86d9b69c2dffb60a8ad2fe3723942544ab3"), layers[0].GetBlobDescriptor().GetDigest()); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), layers[1].GetBlobDescriptor().GetDigest()); }
private void TestToImage_buildable <T>( string jsonFilename) where T : IBuildableManifestTemplate { // Loads the container configuration JSON. SystemPath containerConfigurationJsonFile = Paths.Get( TestResources.GetResource("core/json/containerconfig.json").ToURI()); ContainerConfigurationTemplate containerConfigurationTemplate = JsonTemplateMapper.ReadJsonFromFile <ContainerConfigurationTemplate>( containerConfigurationJsonFile); // Loads the manifest JSON. SystemPath manifestJsonFile = Paths.Get(TestResources.GetResource(jsonFilename).ToURI()); T manifestTemplate = JsonTemplateMapper.ReadJsonFromFile <T>(manifestJsonFile); Image image = JsonToImageTranslator.ToImage(manifestTemplate, containerConfigurationTemplate); IList <ILayer> layers = image.GetLayers(); Assert.AreEqual(1, layers.Count); Assert.AreEqual( new BlobDescriptor( 1000000, DescriptorDigest.FromDigest( "sha256:4945ba5011739b0b98c4a41afe224e417f47c7c99b2ce76830999c9a0861b236")), layers[0].GetBlobDescriptor()); Assert.AreEqual( DescriptorDigest.FromDigest( "sha256:8c662931926fa990b41da3c9f42663a537ccd498130030f9149173a0493832ad"), layers[0].GetDiffId()); CollectionAssert.AreEqual( ImmutableArray.Create( HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(0)) .SetAuthor("Bazel") .SetCreatedBy("bazel build ...") .SetEmptyLayer(true) .Build(), HistoryEntry.CreateBuilder() .SetCreationTimestamp(Instant.FromUnixTimeSeconds(20)) .SetAuthor("Fib") .SetCreatedBy("fib") .Build()), image.GetHistory()); Assert.AreEqual(Instant.FromUnixTimeSeconds(20), image.GetCreated()); Assert.AreEqual(new[] { "some", "entrypoint", "command" }, image.GetEntrypoint()); Assert.AreEqual(ImmutableDic.Of("VAR1", "VAL1", "VAR2", "VAL2"), image.GetEnvironment()); Assert.AreEqual("/some/workspace", image.GetWorkingDirectory()); Assert.AreEqual( ImmutableHashSet.Create(Port.Tcp(1000), Port.Tcp(2000), Port.Udp(3000)), image.GetExposedPorts()); Assert.AreEqual( ImmutableHashSet.Create( AbsoluteUnixPath.Get("/var/job-result-data"), AbsoluteUnixPath.Get("/var/log/my-app-logs")), image.GetVolumes()); Assert.AreEqual("tomcat", image.GetUser()); Assert.AreEqual("value1", image.GetLabels()["key1"]); Assert.AreEqual("value2", image.GetLabels()["key2"]); Assert.AreEqual(2, image.GetLabels().Count); }