예제 #1
0
        private static string PostBadRequest(string fileName = null, string text     = null,
                                             string sourceIp = null, string targetIp = null, string reportData = null, string[] ips = null)
        {
            var model = new DiscoverySessionResultViewModel
            {
                DependencyFindings = new[]
                {
                    new DependencyViewModel
                    {
                        FileName = fileName,
                        Text     = text,
                        SourceIp = sourceIp,
                        TargetIp = targetIp
                    }
                },
                DiscoveryReports = (ips ?? new[] { sourceIp, targetIp }).Select(x =>
                                                                                new DiscoveryResultViewModel
                {
                    AwsInstanceIpAddress = x,
                    ReportData           = reportData == null ? null : JObject.Parse(reportData)
                }).ToArray()
            };

            return(ModelValidator.Validate(model).FirstOrDefault()?.ToString());
        }
예제 #2
0
        public async Task <IActionResult> Post(string awsAccountName, [FromBody] DiscoverySessionResultViewModel session)
        {
            if (!ModelState.IsValid)
            {
                _logger.Warn($"Invalid {nameof(DiscoveryController)}.{nameof(Post)} request: {ModelState}");
                return(ModelState.ToValidationErrorResult());
            }

            var ses    = session.ToDiscoverySessionInfo();
            var awsAcc = await _discoveryService.GetOrCreateAwsAccountAsync(awsAccountName);

            ses.AwsAccountId = awsAcc.Id;

            await _discoveryService.InsertDiscoverySessionAsync(ses);

            return(StatusCode(StatusCodes.Status200OK));
        }
예제 #3
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);
            }
        }