示例#1
0
        public void DiscoveryController_PostInvalidData_ReturnsBadRequest()
        {
            var controller = new DiscoveryController(_service, _logger)
            {
                ControllerContext = new ControllerContext()
            };

            controller.ModelState.AddModelError("foo", "bar");

            var res = (ObjectResult)controller.Post(null, null).Result;

            Assert.AreEqual(StatusCodes.Status400BadRequest, res.StatusCode);
            Assert.AreEqual("bar", ((ValidationErrorsViewModel)res.Value).Errors.Single().Message);
        }
示例#2
0
        public async Task DiscoveryController_Post_CreatesDiscoveryReport()
        {
            var discoveryResult = new DiscoverySessionResultViewModel
            {
                DependencyFindings = new[]
                {
                    new DependencyViewModel
                    {
                        FileName = "log.txt",
                        SourceIp = "1.2.3.4",
                        TargetIp = "5.6.7.8",
                        Text     = "foo"
                    },
                    new DependencyViewModel
                    {
                        FileName = "config",
                        SourceIp = "4.3.2.1",
                        TargetIp = "1.2.3.4",
                        Text     = "bar"
                    }
                },
                DiscoveryReports = new[]
                {
                    new DiscoveryResultViewModel
                    {
                        AwsInstanceIpAddress = "1.2.3.4",
                        ReportData           = JObject.Parse("{\"LocalIpv4\": \"1.2.3.4\"}")
                    },
                    new DiscoveryResultViewModel
                    {
                        AwsInstanceIpAddress = "5.6.7.8",
                        ReportData           = JObject.Parse("{\"LocalIpv4\": \"5.6.7.8\"}")
                    },
                    new DiscoveryResultViewModel
                    {
                        AwsInstanceIpAddress = "4.3.2.1",
                        ReportData           = JObject.Parse("{\"LocalIpv4\": \"4.3.2.1\"}")
                    }
                }
            };

            var findings = discoveryResult.DependencyFindings;

            var status = (StatusCodeResult)await _controller.Post("awsAcc1", discoveryResult);

            // Check status.
            Assert.AreEqual(StatusCodes.Status200OK, status.StatusCode);

            // Check matrix.
            var acc = (await _service.GetAwsAccountsAsync()).Single();

            Assert.AreEqual("awsAcc1", acc.Name);

            var ses    = (await _service.GetDiscoverySessionsWithAccountsAsync(acc.Id)).Single();
            var report = await _service.GetDiscoveryReportAsync(ses.Id);

            var instances = report.Session.AwsInstances.ToArray();

            Assert.AreEqual(new[] { "1.2.3.4", "5.6.7.8", "4.3.2.1" }, instances.Select(x => x.IpAddress.ToString()));

            // 1 -> 2
            var cell = report.DependencyMatrix[0][1];

            Assert.AreEqual(instances[0], cell.SourceAwsInstance);
            Assert.AreEqual(instances[1], cell.TargetAwsInstance);

            var finding = cell.DependencyFindings.Single();

            Assert.AreEqual(findings[0].FileName, finding.FileName);
            Assert.AreEqual(findings[0].Text, finding.Text);

            // 3 -> 1
            var cell2 = report.DependencyMatrix[2][0];

            Assert.AreEqual(instances[2], cell2.SourceAwsInstance);
            Assert.AreEqual(instances[0], cell2.TargetAwsInstance);

            var finding2 = cell2.DependencyFindings.Single();

            Assert.AreEqual(findings[1].FileName, finding2.FileName);
            Assert.AreEqual(findings[1].Text, finding2.Text);

            // Check report.
            foreach (var inst in instances)
            {
                var line = inst.ReportLines.Single();

                Assert.AreEqual(inst, line.AwsInstance);
                Assert.AreEqual("LocalIpv4", line.Name);
                Assert.AreEqual(inst.IpAddress.ToString(), line.Value);
                Assert.IsNull(line.Parent);
                Assert.IsFalse(line.IsObject);
                Assert.AreEqual(ReportLineStatus.None, line.Status);
            }
        }