public void ReturnsEmptySectionsWhenWrongOptionsProvided() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("\"\"") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental); Assert.False(parameters.HasValue); }
public void ReturnsEmptySectionsWhenNoSectionsProvided() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{}") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.False(parameters.NodeSelector.HasValue); }
public void ParsesNoneNodeSelectorExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ nodeSelector: null }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.False(parameters.NodeSelector.HasValue); }
public void ParsesNoneSecurityContextExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ securityContext: null }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.False(parameters.SecurityContext.HasValue); }
public void ParsesEmptyNodeSelectorExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ nodeSelector: { } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.NodeSelector.HasValue); parameters.NodeSelector.ForEach(Assert.Empty); }
public void ParsesEmptyRequirementsResourcesExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ resources: { limits: {}, requests: {} } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.Resources.HasValue); parameters.Resources.ForEach(resources => Assert.Empty(resources.Limits)); parameters.Resources.ForEach(resources => Assert.Empty(resources.Requests)); }
public void IgnoresUnsupportedOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ a: { a: \"b\" } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.False(parameters.Volumes.HasValue); Assert.False(parameters.NodeSelector.HasValue); Assert.False(parameters.Resources.HasValue); }
public void ParsesEmptyServiceOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ serviceOptions: { } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.ServiceOptions.HasValue); parameters.ServiceOptions.ForEach(options => Assert.False(options.Type.HasValue)); parameters.ServiceOptions.ForEach(options => Assert.False(options.LoadBalancerIP.HasValue)); }
public void ParsesSomeDeploymentStrategyExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse(@"{ strategy: { type: ""RollingUpdate"", rollingUpdate: { maxUnavailable: 1 } } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.DeploymentStrategy.HasValue); parameters.DeploymentStrategy.ForEach(deploymentStrategy => Assert.Equal("RollingUpdate", deploymentStrategy.Type)); parameters.DeploymentStrategy.ForEach(deploymentStrategy => Assert.Equal("1", deploymentStrategy.RollingUpdate.MaxUnavailable)); }
public void ParsesEmptyDeploymentStrategyExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ strategy: { } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.DeploymentStrategy.HasValue); parameters.DeploymentStrategy.ForEach(strategy => Assert.Null(strategy.Type)); parameters.DeploymentStrategy.ForEach(strategy => Assert.Null(strategy.RollingUpdate)); }
public void PvcMappingForPVVolumeExtended() { var identity = new ModuleIdentity("hostname", "gatewayhost", "deviceid", "ModuleId", Mock.Of <ICredentials>()); var labels = new Dictionary <string, string>(); var hostConfig = VolumeMountHostConfig; var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse( @"{ ""volumes"": [ { ""volume"": { ""name"": ""module-config"", }, ""volumeMounts"": [ { ""name"": ""module-config"", ""mountPath"": ""/etc/module"", ""mountPropagation"": ""None"", ""readOnly"": ""true"", ""subPath"": """" } ] } ]}") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); var volumes = new[] { parameters.Volumes.OrDefault().Single(), }; var config = new KubernetesConfig("image", CreatePodParameters.Create(volumes: volumes, hostConfig: hostConfig), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config, EdgeletModuleOwner); var mapper = CreateMapper(); var deployment = mapper.CreateDeployment(identity, module, labels); var pod = deployment.Spec.Template; Assert.True(pod != null); var podVolume = pod.Spec.Volumes.Single(v => v.Name == "module-config"); var podVolumeMount = pod.Spec.Containers.Single(p => p.Name != "proxy").VolumeMounts.Single(vm => vm.Name == "module-config"); Assert.Equal("/etc/module", podVolumeMount.MountPath); }
public void ParsesSomeNodeSelectorExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ nodeSelector: { disktype: \"ssd\", gpu: \"true\" } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.NodeSelector.HasValue); parameters.NodeSelector.ForEach(selector => Assert.Equal(2, selector.Count)); parameters.NodeSelector.ForEach(selector => Assert.Equal("ssd", selector["disktype"])); parameters.NodeSelector.ForEach(selector => Assert.Equal("true", selector["gpu"])); }
public void ParsesSomeResourcesExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ resources: { limits: { \"memory\": \"128Mi\" }, requests: { \"cpu\": \"250m\" } } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.Resources.HasValue); parameters.Resources.ForEach(resources => Assert.Equal(new Dictionary <string, ResourceQuantity> { ["memory"] = new ResourceQuantity("128Mi") }, resources.Limits)); parameters.Resources.ForEach(resources => Assert.Equal(new Dictionary <string, ResourceQuantity> { ["cpu"] = new ResourceQuantity("250m") }, resources.Requests)); }
public void ParsesServiceOptionsTypeOnly() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse(@"{ serviceOptions: { type: ""LoadBalancer"" } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.ServiceOptions.HasValue); parameters.ServiceOptions.ForEach(options => { Assert.True(options.Type.HasValue); options.Type.ForEach(t => Assert.Equal(PortMapServiceType.LoadBalancer, t)); }); parameters.ServiceOptions.ForEach(options => Assert.False(options.LoadBalancerIP.HasValue)); }
public void ParsesServiceOptionsLBIPOnly() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse(@"{ serviceOptions: { loadbalancerip: ""any old string"" } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.ServiceOptions.HasValue); parameters.ServiceOptions.ForEach(options => Assert.False(options.Type.HasValue)); parameters.ServiceOptions.ForEach(options => { Assert.True(options.LoadBalancerIP.HasValue); options.LoadBalancerIP.ForEach(l => Assert.Equal("any old string", l)); }); }
public void ParsesSomeSecurityContextExperimentalOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse("{ securityContext: { runAsGroup: 1001, runAsUser: 1000, runAsNonRoot: true } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.SecurityContext.HasValue); parameters.SecurityContext.ForEach(securityContext => Assert.Equal(1001, securityContext.RunAsGroup)); parameters.SecurityContext.ForEach(securityContext => Assert.Equal(1000, securityContext.RunAsUser)); parameters.SecurityContext.ForEach(securityContext => Assert.Equal(true, securityContext.RunAsNonRoot)); parameters.SecurityContext.ForEach(securityContext => Assert.Null(securityContext.Sysctls)); parameters.SecurityContext.ForEach(securityContext => Assert.Null(securityContext.FsGroup)); parameters.SecurityContext.ForEach(securityContext => Assert.Null(securityContext.SeLinuxOptions)); parameters.SecurityContext.ForEach(securityContext => Assert.Null(securityContext.SupplementalGroups)); }
public void ParsesServiceOptions() { var experimental = new Dictionary <string, JToken> { ["k8s-experimental"] = JToken.Parse(@"{ serviceOptions: { type: ""nodeport"", loadbalancerip: ""100.1.2.3"" } }") }; var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault(); Assert.True(parameters.ServiceOptions.HasValue); parameters.ServiceOptions.ForEach(options => { Assert.True(options.Type.HasValue); options.Type.ForEach(t => Assert.Equal(PortMapServiceType.NodePort, t)); }); parameters.ServiceOptions.ForEach(options => { Assert.True(options.LoadBalancerIP.HasValue); options.LoadBalancerIP.ForEach(l => Assert.Equal("100.1.2.3", l)); }); }
public void ReturnsNoneWhenParseMissedOptions(IDictionary <string, JToken> experimental) { var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental); Assert.Equal(Option.None <KubernetesExperimentalCreatePodParameters>(), parameters); }