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()); }
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)); }
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); } }