コード例 #1
0
        public void EdgeDeploymentStatusSuccessFactoryIsSuccessStatus()
        {
            var status = EdgeDeploymentStatus.Success("deployed");

            Assert.Equal(EdgeDeploymentStatusType.Success, status.State);
            Assert.Equal("deployed", status.Message);
        }
コード例 #2
0
        public async void GettingSameStatusTwiceReportsOnce()
        {
            var returnedStatus = EdgeDeploymentStatus.Success("Successfully deployed");
            var edgeDefinition = new EdgeDeploymentDefinition("v1", "EdgeDeployment", new V1ObjectMeta(name: ResourceName), new List <KubernetesModule>(), null);
            var response       = new HttpOperationResponse <object>()
            {
                Body     = edgeDefinition,
                Response = new HttpResponseMessage(HttpStatusCode.OK)
            };

            // DeployModules returns a status, confirm this is what is reported.
            var controller = Mock.Of <IEdgeDeploymentController>();

            Mock.Get(controller).Setup(c => c.DeployModulesAsync(It.IsAny <ModuleSet>(), It.IsAny <ModuleSet>()))
            .ReturnsAsync(returnedStatus);

            var client = Mock.Of <IKubernetes>();

            Mock.Get(client).Setup(c => c.ReplaceNamespacedCustomObjectStatusWithHttpMessagesAsync(It.IsAny <object>(), Constants.EdgeDeployment.Group, Constants.EdgeDeployment.Version, DeviceNamespace, Constants.EdgeDeployment.Plural, It.IsAny <string>(), null, It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            var edgeOperator = new EdgeDeploymentOperator(
                ResourceName,
                DeviceNamespace,
                client,
                controller);

            await edgeOperator.EdgeDeploymentOnEventHandlerAsync(WatchEventType.Added, edgeDefinition);

            await edgeOperator.EdgeDeploymentOnEventHandlerAsync(WatchEventType.Modified, edgeDefinition);

            Mock.Get(controller).Verify(c => c.DeployModulesAsync(It.IsAny <ModuleSet>(), It.IsAny <ModuleSet>()), Times.Exactly(2));
            Mock.Get(client).Verify(c => c.ReplaceNamespacedCustomObjectStatusWithHttpMessagesAsync(It.IsAny <object>(), Constants.EdgeDeployment.Group, Constants.EdgeDeployment.Version, DeviceNamespace, Constants.EdgeDeployment.Plural, It.IsAny <string>(), null, It.IsAny <CancellationToken>()), Times.Once);
        }
コード例 #3
0
        public async Task ReturnFailureWhenUnableToObtainModuleIdentities()
        {
            var client    = new Mock <IKubernetes>();
            var lifecycle = new Mock <IModuleIdentityLifecycleManager>();

            lifecycle.Setup(l => l.GetModuleIdentitiesAsync(It.IsAny <ModuleSet>(), It.IsAny <ModuleSet>()))
            .ReturnsAsync(ImmutableDictionary.Create <string, IModuleIdentity>());
            var serviceMapper        = new Mock <IKubernetesServiceMapper>();
            var deploymentMapper     = new Mock <IKubernetesDeploymentMapper>();
            var pvcMapper            = new Mock <IKubernetesPvcMapper>();
            var serviceAccountMapper = new Mock <IKubernetesServiceAccountMapper>();
            var controller           = new EdgeDeploymentController(
                ResourceName,
                DeviceSelector,
                DeviceNamespace,
                client.Object,
                lifecycle.Object,
                serviceMapper.Object,
                deploymentMapper.Object,
                pvcMapper.Object,
                serviceAccountMapper.Object);
            var module = new Mock <IModule>();

            module.SetupGet(m => m.Name).Returns("module1");
            var desiredModules = ModuleSet.Create(module.Object);
            var currentModules = ModuleSet.Empty;

            var status = await controller.DeployModulesAsync(desiredModules, currentModules);

            Assert.Equal(EdgeDeploymentStatus.Failure("Unable to obtain identities for desired modules"), status);
        }
コード例 #4
0
        public async void StatusIsFailedWithSpecialMessageWhenHttpExceptionIsThrown()
        {
            HttpOperationException controllerException = new HttpOperationException(ExceptionMessage)
            {
                Request = new HttpRequestMessageWrapper(new HttpRequestMessage(HttpMethod.Put, new Uri("http://valid-uri")), "content")
            };
            Option <EdgeDeploymentStatus> reportedStatus = Option.None <EdgeDeploymentStatus>();
            EdgeDeploymentStatus          expectedStatus = new EdgeDeploymentStatus(EdgeDeploymentStatusType.Failure, $"{controllerException.Request.Method} [{controllerException.Request.RequestUri}]({controllerException.Message})");
            var edgeDefinition = new EdgeDeploymentDefinition("v1", "EdgeDeployment", new V1ObjectMeta(name: ResourceName), new List <KubernetesModule>(), null);
            var response       = new HttpOperationResponse <object>()
            {
                Body     = edgeDefinition,
                Response = new HttpResponseMessage(HttpStatusCode.OK)
            };

            var controller = Mock.Of <IEdgeDeploymentController>();

            Mock.Get(controller).Setup(c => c.DeployModulesAsync(It.IsAny <ModuleSet>(), It.IsAny <ModuleSet>()))
            .ThrowsAsync(controllerException);

            var client = Mock.Of <IKubernetes>();

            Mock.Get(client).Setup(c => c.ReplaceNamespacedCustomObjectStatusWithHttpMessagesAsync(It.IsAny <object>(), Constants.EdgeDeployment.Group, Constants.EdgeDeployment.Version, DeviceNamespace, Constants.EdgeDeployment.Plural, It.IsAny <string>(), null, It.IsAny <CancellationToken>()))
            .Callback((object o, string group, string version, string _namespace, string plural, string name, Dictionary <string, List <string> > headers, CancellationToken token) =>
            {
                Assert.True(o is JObject);
                EdgeDeploymentDefinition e = ((JObject)o).ToObject <EdgeDeploymentDefinition>();
                reportedStatus             = e.Status;
            })
            .ReturnsAsync(response);

            var edgeOperator = new EdgeDeploymentOperator(
                ResourceName,
                DeviceNamespace,
                client,
                controller);

            HttpOperationException ex = await Assert.ThrowsAsync <HttpOperationException>(() => edgeOperator.EdgeDeploymentOnEventHandlerAsync(WatchEventType.Added, edgeDefinition));

            Assert.Equal(controllerException, ex);
            Assert.True(reportedStatus.HasValue);
            Assert.Equal(expectedStatus, reportedStatus.OrDefault());
            Mock.Get(controller).VerifyAll();
            Mock.Get(client).VerifyAll();
        }
コード例 #5
0
        public void EdgeDeploymentStatusExceptionFailureFactoryIsFailureStatus()
        {
            Exception e      = new Exception("deployment failed");
            var       status = EdgeDeploymentStatus.Failure(e);

            Assert.Equal(EdgeDeploymentStatusType.Failure, status.State);
            Assert.Equal("deployment failed", status.Message);

            var uri = new Uri("https://my-uri");
            HttpOperationException httpEx = new HttpOperationException("HTTP Exception")
            {
                Request = new HttpRequestMessageWrapper(new HttpRequestMessage(HttpMethod.Post, uri), string.Empty)
            };
            var httpStatus = EdgeDeploymentStatus.Failure(httpEx);

            Assert.Equal(EdgeDeploymentStatusType.Failure, httpStatus.State);
            Assert.Equal($"POST [{uri}](HTTP Exception)", httpStatus.Message);
        }
コード例 #6
0
        public async void WhatDeployModulesReturnsIsWhatIsReported()
        {
            var returnedStatus = EdgeDeploymentStatus.Success("Successfully deployed");
            Option <EdgeDeploymentStatus> reportedStatus = Option.None <EdgeDeploymentStatus>();
            var edgeDefinition = new EdgeDeploymentDefinition("v1", "EdgeDeployment", new V1ObjectMeta(name: ResourceName), new List <KubernetesModule>(), null);
            var response       = new HttpOperationResponse <object>()
            {
                Body     = edgeDefinition,
                Response = new HttpResponseMessage(HttpStatusCode.OK)
            };

            // DeployModules returns a status, confirm this is what is reported.
            var controller = Mock.Of <IEdgeDeploymentController>();

            Mock.Get(controller).Setup(c => c.DeployModulesAsync(It.IsAny <ModuleSet>(), It.IsAny <ModuleSet>()))
            .ReturnsAsync(returnedStatus);

            var client = Mock.Of <IKubernetes>();

            Mock.Get(client).Setup(c => c.ReplaceNamespacedCustomObjectStatusWithHttpMessagesAsync(It.IsAny <object>(), Constants.EdgeDeployment.Group, Constants.EdgeDeployment.Version, DeviceNamespace, Constants.EdgeDeployment.Plural, It.IsAny <string>(), null, It.IsAny <CancellationToken>()))
            .Callback((object o, string group, string version, string _namespace, string plural, string name, Dictionary <string, List <string> > headers, CancellationToken token) =>
            {
                Assert.True(o is JObject);
                EdgeDeploymentDefinition e = ((JObject)o).ToObject <EdgeDeploymentDefinition>();
                reportedStatus             = e.Status;
            })
            .ReturnsAsync(response);

            var edgeOperator = new EdgeDeploymentOperator(
                ResourceName,
                DeviceNamespace,
                client,
                controller);

            await edgeOperator.EdgeDeploymentOnEventHandlerAsync(WatchEventType.Added, edgeDefinition);

            Assert.True(reportedStatus.HasValue);
            Assert.Equal(returnedStatus, reportedStatus.OrDefault());

            Mock.Get(controller).VerifyAll();
            Mock.Get(client).VerifyAll();
        }
コード例 #7
0
 public void EdgeDeploymentStatusAreSameWithSameParametersTest(EdgeDeploymentStatus x, EdgeDeploymentStatus y)
 {
     Assert.Equal(x, y);
 }
コード例 #8
0
 public void EdgeDeploymentStatusAreDifferentWithDifferentParametersTest(EdgeDeploymentStatus x, EdgeDeploymentStatus y)
 {
     Assert.NotEqual(x, y);
 }