Example #1
0
        public static string GetStandardPayloadAsText(FiksRequest fiksRequest)
        {
            var basepath        = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var payLoadFilePath = fiksRequest.TestCase.PayloadFilePath;

            return(File.ReadAllText(basepath + "/" + payLoadFilePath));
        }
Example #2
0
        public static void CreateCustomPayload(FiksRequest fiksRequest, List <IPayload> payloads)
        {
            IPayload payload = new StreamPayload(new MemoryStream(fiksRequest.CustomPayloadFile.Payload),
                                                 fiksRequest.CustomPayloadFile.Filename);

            payloads.Add(payload);
        }
Example #3
0
        public Guid Send(FiksRequest fiksRequest, Guid receiverId)
        {
            var ttl            = new TimeSpan(0, TTLMinutes, 0);
            var messageRequest = new MeldingRequest(_senderId, receiverId, fiksRequest.TestCase.MessageType, ttl);

            var payloads = new List <IPayload>();

            if (fiksRequest.CustomPayloadFile != null)
            {
                PayloadHelper.CreateCustomPayload(fiksRequest, payloads);
            }
            else
            {
                PayloadHelper.CreateStandardPayload(fiksRequest, payloads);
            }

            var attachmentFileNames = fiksRequest.TestCase.PayloadAttachmentFileNames;

            if (!string.IsNullOrEmpty(attachmentFileNames))
            {
                foreach (var payloadFileName in attachmentFileNames.Split(";"))
                {
                    var testCaseDirectory = Path.Combine(TestSeeder.TestsDirectory, fiksRequest.TestCase.Protocol, fiksRequest.TestCase.Operation + fiksRequest.TestCase.Situation);
                    var fileStream        = File.OpenRead(Path.Combine(testCaseDirectory, "Attachments", payloadFileName));
                    payloads.Add(new StreamPayload(fileStream, payloadFileName));
                }
            }

            fiksRequest.SentAt = DateTime.Now;
            var result = _client.Send(messageRequest, payloads).Result;

            return(result.MeldingId);
        }
Example #4
0
        public static void CreateStandardPayload(FiksRequest fiksRequest, List <IPayload> payloads)
        {
            var payLoadFileName = fiksRequest.TestCase.PayloadFileName;

            if (string.IsNullOrEmpty(payLoadFileName))
            {
                return;
            }

            IPayload payload = new StringPayload(GetStandardPayloadAsText(fiksRequest), payLoadFileName);

            payloads.Add(payload);
        }
Example #5
0
        private static void ValidateExistenceOfExpectedResponseMessageTypes(FiksRequest fiksRequest,
                                                                            IEnumerable <string> expectedResponseMessageTypes)
        {
            foreach (var expectedResponseMessageType in expectedResponseMessageTypes)
            {
                if (!fiksRequest.FiksResponses.Any(r => r.Type.Equals(expectedResponseMessageType)))
                {
                    var validationError = string.Format(
                        ValidationErrorMessages.MissingResponseMessage, expectedResponseMessageType
                        );

                    fiksRequest.FiksResponseValidationErrors.Add(validationError);
                }
            }
        }
Example #6
0
        public void TestValidateSokBetweenDatesXmlWithCorrectResult()
        {
            var responseXml      = File.ReadAllText(Directory.GetCurrentDirectory() + "/TestData/ValidatorTests/NySokN4/sokeresultatMinimum.xml");
            var validationErrors = new List <string>();

            var fiksRequest = new FiksRequest
            {
                TestCase = new TestCase
                {
                    MessageType     = ArkivintegrasjonMeldingTypeV1.Sok,
                    PayloadFilePath = "/TestData/ValidatorTests/NySokN4/sok.xml"
                }
            };

            FiksResponseValidator.ValidateXmlPayloadContent(responseXml, fiksRequest, validationErrors);
            foreach (var validationError in validationErrors)
            {
                Console.Out.WriteLine(validationError);
            }
            Assert.True(validationErrors.Count == 0);
        }
Example #7
0
 public static string GetStandardRequestXml(FiksRequest fiksRequest)
 {
     return(PayloadHelper.GetStandardPayloadAsText(fiksRequest));
 }
Example #8
0
        public static string GetCustomRequestXml(FiksRequest fiksRequest)
        {
            var stream = new StreamReader(new MemoryStream(fiksRequest.CustomPayloadFile.Payload));

            return(stream.ReadToEnd());
        }
Example #9
0
        public async Task <ActionResult <TestSession> > PostTestSession([FromBody] TestRequest testRequest)
        {
            Log.Information("PostTestSession start");

            TestSession testSession;
            var         isNewTestSession = false;
            var         testSessionId    = Request.Cookies["_testSessionId"];

            //Trim recipient for leading and trailing white-spaces
            testRequest.RecipientId = testRequest.RecipientId.Trim();

            if (!string.IsNullOrEmpty(testSessionId))
            {
                Log.Debug("Finding session with sessionId {SessionId}", testRequest.SessionId);
                testSession = GetAndUpdateTestSession(testRequest, testSessionId);
            }
            else
            {
                Log.Debug("Create new TestSession from incoming request");
                try
                {
                    testSession = JsonSerializer.Deserialize <TestSession>(JsonSerializer.Serialize(testRequest));
                }
                catch (Exception e)
                {
                    var message = e.Message;
                    if (e.InnerException != null)
                    {
                        message = e.InnerException.Message;
                    }

                    Log.Error("Error with deserializing the test request: {}", JsonSerializer.Serialize(testRequest));
                    return(BadRequest(message));
                }
                testSession.Id   = Guid.NewGuid();
                isNewTestSession = true;
            }

            testSession.CreatedAt = DateTime.Now;

            testSession.FiksRequests ??= new List <FiksRequest>();

            foreach (var testId in testSession.SelectedTestCaseIds)
            {
                var testCase = await _context.TestCases.FindAsync(testId);

                var isNewFiksRequest = false;
                var fiksRequest      = testSession.FiksRequests.Find(fr => fr.TestCase == testCase);

                if (fiksRequest == null)
                {
                    fiksRequest = new FiksRequest
                    {
                        Id       = Guid.NewGuid(),
                        TestCase = testCase
                    };
                    isNewFiksRequest = true;
                }

                try
                {
                    fiksRequest.MessageGuid = _fiksRequestMessageService.Send(fiksRequest, testSession.RecipientId);
                }
                catch (Exception e)
                {
                    Log.Error(e, "Noe gikk galt ved sending av request til {FiksKonto}", testSession.RecipientId);
                    if (e.InnerException != null && e.InnerException.Message.Contains("Ingen konto med id"))
                    {
                        Log.Error("TestSession FIKS-account {FiksKonto} is illegal", testSession.RecipientId);
                        return(BadRequest("Ugyldig konto: " + testSession.RecipientId));
                    }
                    Log.Error("An Error occured when sending FIKS request with recipient ID {RecipientId}", testSession.RecipientId);
                    return(StatusCode(500, e.Message));
                }

                if (isNewFiksRequest)
                {
                    testSession.FiksRequests.Add(fiksRequest);
                    await _context.FiksRequest.AddAsync(fiksRequest);
                }
                else
                {
                    _context.FiksRequest.Update(fiksRequest);
                }
            }

            testSession.SelectedTestCaseIds.Clear();

            if (isNewTestSession)
            {
                _context.TestSessions.Add(testSession);
            }
            else
            {
                _context.TestSessions.Update(testSession);
            }

            await _context.SaveChangesAsync();

            Log.Debug("Session successfully created with id {Id} and recipientId {RecipientId}", testSession.Id, testSession.RecipientId);

            return(CreatedAtAction("GetTestSession", new { id = testSession.Id }, testSession));
        }
Example #10
0
        private static void ValidatePayload(FiksResponse fiksResponse, FiksRequest fiksRequest,
                                            List <string> validationErrors)
        {
            var fiksPayload             = GetFiksPayload(fiksResponse.FiksPayloads);
            var receivedPayloadFileName = fiksPayload != null ? fiksPayload.Filename : null;
            var messageType             = fiksResponse.Type;

            // Ingen payload forventet og heller ingen payload mottatt. Alt ok.
            if (!ShouldHavePayload(messageType) && receivedPayloadFileName == null)
            {
                return;
            }

            // Forventet payload men ingen mottatt. Feil!
            if (ShouldHavePayload(messageType) && receivedPayloadFileName == null)
            {
                validationErrors.Add(string.Format(
                                         ValidationErrorMessages.MissingPayloadFileMessage, messageType
                                         ));
                return;
            }

            // Ingen paylod forventet men det er mottatt fil. Feil!
            if (!ShouldHavePayload(messageType) && receivedPayloadFileName != null)
            {
                validationErrors.Add(string.Format(
                                         ValidationErrorMessages.UnexpectedPayloadFileMessage, messageType
                                         ));
                return;
            }

            // Payload mottat som forventet men feil filformat. Feil!
            if (receivedPayloadFileName != null && !PayloadChecksHelper.HasValidFileFormat(receivedPayloadFileName))
            {
                validationErrors.Add(string.Format(
                                         ValidationErrorMessages.InvalidPayloadFileFormatMessage, receivedPayloadFileName.Split('.').Last()
                                         ));
                return;
            }

            // Payload har ikke korrekt filnavn i forhold til meldingstype. Feil!
            if (!HasCorrectFilename(fiksResponse.Type, receivedPayloadFileName))
            {
                validationErrors.Add(string.Format(
                                         ValidationErrorMessages.InvalidPayloadFilename, receivedPayloadFileName, GetExpectedFileName(messageType)
                                         ));
                return;
            }

            if (receivedPayloadFileName != null && receivedPayloadFileName.EndsWith(".xml"))
            {
                var xmlContent = System.Text.Encoding.Default.GetString(fiksPayload.Payload);

                ValidateXmlWithSchema(xmlContent, validationErrors, messageType);
                ValidateXmlPayloadContent(xmlContent, fiksRequest, validationErrors);
            }
            else
            {
                if (receivedPayloadFileName != null && receivedPayloadFileName.EndsWith(".json"))
                {
                    ValidateJsonPayloadContent(System.Text.Encoding.Default.GetString(fiksPayload.Payload), fiksRequest.TestCase.FiksResponseTests, validationErrors);
                }
            }
        }
Example #11
0
        public void Setup()
        {
            _validator = new FiksResponseValidator();

            _fiksResponseTest = new FiksResponseTest
            {
                PayloadQuery  = "/arkivmelding/registrering",
                ExpectedValue = "someValue",
                ValueType     = SearchValueType.Attribute,
            };

            var requestPayloadFilePath = "./TestData/Requests/ny_inngaaende.xml";

            _testCase = new TestCase
            {
                MessageType                  = ArkivintegrasjonMeldingTypeV1.Arkivmelding,
                TestName                     = "testTestCase",
                FiksResponseTests            = new List <FiksResponseTest>(),
                PayloadFileName              = requestPayloadFilePath,
                ExpectedResponseMessageTypes = new List <FiksExpectedResponseMessageType>()
                {
                    new FiksExpectedResponseMessageType()
                    {
                        ExpectedResponseMessageType = "no.ks.fiks.gi.arkivintegrasjon.mottatt.v1"
                    }, new FiksExpectedResponseMessageType()
                    {
                        ExpectedResponseMessageType = "no.ks.fiks.gi.arkivintegrasjon.kvittering.v1"
                    }
                }
            };

            _testCase.FiksResponseTests.Add(_fiksResponseTest);

            _fiksResponseMottatt = new FiksResponse
            {
                Type = ArkivintegrasjonMeldingTypeV1.ArkivmeldingMottatt,
            };

            var responsePayloadFilePath = "./TestData/Responses/svar_paa_ny_inngaaende.xml";

            byte[] fileAsBytes;
            using (MemoryStream ms = new MemoryStream())
            {
                Stream s = File.OpenRead(responsePayloadFilePath);
                s.CopyTo(ms);
                fileAsBytes = ms.ToArray();
            }

            _fiksResponseKvittering = new FiksResponse
            {
                Type         = ArkivintegrasjonMeldingTypeV1.ArkivmeldingKvittering,
                ReceivedAt   = DateTime.Now,
                FiksPayloads = new List <FiksPayload> {
                    new FiksPayload()
                    {
                        Filename = "svar_paa_ny_inngaaende.xml", Payload = fileAsBytes
                    }
                },
            };

            _fiksRequest = new FiksRequest
            {
                MessageGuid                  = new Guid("F15D3D0D-FA20-41D7-B762-A718ACE95A0B"),
                FiksResponses                = new List <FiksResponse>(),
                SentAt                       = DateTime.Now,
                IsFiksResponseValidated      = false,
                FiksResponseValidationErrors = new List <string>(),
                TestCase                     = _testCase,
            };

            _fiksRequest.FiksResponses.Add(_fiksResponseMottatt);
            _fiksRequest.FiksResponses.Add(_fiksResponseKvittering);

            _testSession = new TestSession
            {
                Id           = new Guid("0459C8B6-EAF1-4186-8FCB-BEC3AC311404"),
                FiksRequests = new List <FiksRequest>(),
                CreatedAt    = DateTime.Now,
            };

            _testSession.FiksRequests.Add(_fiksRequest);
        }
Example #12
0
        public async Task <ActionResult> UploadCustomPayload(string testcaseId)
        {
            Log.Information("UploadCustomPayload start");
            // Get testSessionId from cookie
            var testSessionId  = Request.Cookies["_testSessionId"];
            var newTestSession = false;
            var testSession    = new TestSession();

            if (string.IsNullOrEmpty(testSessionId))
            {
                Log.Information("UploadCustomPayload could not find a testSessionId from cookie. Creating a new TestSession");
                testSession = new TestSession()
                {
                    Id        = Guid.NewGuid(),
                    CreatedAt = DateTime.Now
                };
                newTestSession = true;
            }
            else
            {
                testSession = _context.TestSessions.FirstAsync(s => s.Id == Guid.Parse(testSessionId)).Result ??
                              new TestSession()
                {
                    Id = Guid.NewGuid(),
                };
            }

            var file = Request.Form.Files[0];

            if (file.Length <= 0)
            {
                Log.Error("File size is zero");
                return(BadRequest());
            }

            var stream = new MemoryStream();
            await file.CopyToAsync(stream);


            var fiksRequest = testSession.FiksRequests?.Find(fr => fr.TestCase.TestId.Equals(testcaseId));

            if (fiksRequest == null)
            {
                fiksRequest = new FiksRequest
                {
                    Id                = Guid.NewGuid(),
                    TestCase          = await _context.TestCases.FindAsync(testcaseId),
                    CustomPayloadFile = new FiksRequestPayload
                    {
                        Filename = file.FileName,
                        Payload  = stream.ToArray()
                    }
                };
            }
            else
            {
                fiksRequest.CustomPayloadFile = new FiksRequestPayload
                {
                    Filename = file.FileName,
                    Payload  = stream.ToArray()
                };
            }

            if (testSession.FiksRequests == null)
            {
                testSession.FiksRequests = new List <FiksRequest> {
                    fiksRequest
                };
            }
            else
            {
                testSession.FiksRequests.Add(fiksRequest);
            }

            if (newTestSession)
            {
                await _context.TestSessions.AddAsync(testSession);
            }

            await _context.FiksRequest.AddAsync(fiksRequest);

            await _context.SaveChangesAsync();

            Log.Information("UploadCustomPayload finished");

            return(new OkResult());
        }
Example #13
0
        public static void ValidateXmlPayloadWithSokRequest(string xmlPayloadContent, FiksRequest fiksRequest,
                                                            List <string> validationErrors)
        {
            var sokXml = "";

            if (fiksRequest.CustomPayloadFile != null)
            {
                sokXml = GetCustomRequestXml(fiksRequest);
            }
            else
            {
                sokXml = GetStandardRequestXml(fiksRequest);
            }

            using (var sokTextReader = (TextReader) new StringReader(sokXml))
            {
                //Parse the sok request
                var sok = (Sok) new XmlSerializer(typeof(Sok)).Deserialize(sokTextReader);

                //Parse the sok response
                using (var sokResponseTextReader = (TextReader) new StringReader(xmlPayloadContent))
                {
                    switch (sok.ResponsType)
                    {
                    case ResponsType.Utvidet:
                        SokeresultatUtvidetValidator.Validate(sokResponseTextReader, sok, validationErrors);
                        break;

                    case ResponsType.Noekler:
                        SokeresultatNoeklerValidator.Validate(sokResponseTextReader, sok, validationErrors);
                        break;

                    case ResponsType.Minimum:
                    default:
                        SokeresultatMinimumValidator.Validate(sokResponseTextReader, sok, validationErrors);
                        break;
                    }
                }
            }
        }