Example #1
0
        public void ReturnsEmptySectionsWhenWrongOptionsProvided()
        {
            var experimental = new Dictionary <string, JToken>
            {
                ["k8s-experimental"] = JToken.Parse("\"\"")
            };

            var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental);

            Assert.False(parameters.HasValue);
        }
Example #2
0
        public void ReturnsEmptySectionsWhenNoSectionsProvided()
        {
            var experimental = new Dictionary <string, JToken>
            {
                ["k8s-experimental"] = JToken.Parse("{}")
            };

            var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental).OrDefault();

            Assert.False(parameters.NodeSelector.HasValue);
        }
Example #3
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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));
        }
Example #7
0
        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);
        }
Example #12
0
        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"]));
        }
Example #13
0
        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));
            });
        }
Example #18
0
        public void ReturnsNoneWhenParseMissedOptions(IDictionary <string, JToken> experimental)
        {
            var parameters = KubernetesExperimentalCreatePodParameters.Parse(experimental);

            Assert.Equal(Option.None <KubernetesExperimentalCreatePodParameters>(), parameters);
        }