예제 #1
0
        public void Verify(string description = null, string providerState = null)
        {
            if (String.IsNullOrEmpty(PactFileUri))
            {
                throw new InvalidOperationException(
                          "PactFileUri has not been set, please supply a uri using the PactUri method.");
            }

            MessagePactFile pactFile;

            try
            {
                string pactFileJson;

                if (IsWebUri(PactFileUri))
                {
                    pactFileJson = HttpGetPactFile();
                }
                else
                {
                    pactFileJson = File.ReadAllText(PactFileUri);
                }

                pactFile = JsonConvert.DeserializeObject <MessagePactFile>(pactFileJson);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(
                          String.Format("Json Pact file could not be retrieved using uri \'{0}\'.", PactFileUri), ex);
            }

            //Filter interactions
            if (description != null)
            {
                pactFile.Messages = pactFile.Messages.Where(x => x.Description.Equals(description));
            }

            if (providerState != null)
            {
                pactFile.Messages = pactFile.Messages.Where(x => x.ProviderState.Equals(providerState));
            }

            if ((description != null || providerState != null) &&
                (pactFile.Messages == null || !pactFile.Messages.Any()))
            {
                throw new ArgumentException(
                          "The specified description and/or providerState filter yielded no interactions.");
            }

            var loggerName = LogProvider.CurrentLogProvider.AddLogger(_pactVerifierConfig.LogDir,
                                                                      ProviderName.ToLowerSnakeCase(), "{0}_verifier.log");

            _pactVerifierConfig.LoggerName = loggerName;

            var verificationResult = new PactVerificationResult
            {
                ProviderApplicationVersion = _pactVerifierConfig.ProviderVersion
            };

            try
            {
                var validator = new MessageProviderValidator(new Reporter(_pactVerifierConfig), _pactVerifierConfig);
                validator.Validate(pactFile, ProviderStates);

                verificationResult.Success = true;
            }
            finally
            {
                if (_pactVerifierConfig.PublishVerificationResults)
                {
                    HttpPostPublishVerificationResults(
                        pactFile.Links.PublishVerificationResults.Href, verificationResult);
                }

                LogProvider.CurrentLogProvider.RemoveLogger(_pactVerifierConfig.LoggerName);
            }
        }
예제 #2
0
        public void Verify(string description = null, string providerState = null)
        {
            if (String.IsNullOrEmpty(PactFileUri))
            {
                throw new InvalidOperationException(
                          "PactFileUri has not been set, please supply a uri using the PactUri method.");
            }

            MessagePactFile pactFile;

            try
            {
                string pactFileJson;

                if (IsWebUri(PactFileUri))
                {
                    //Pact broker does not handle v3 specs for messages at this time
                    throw new NotImplementedException(
                              "Pact broker does not handle v3 specs for messages at this time.  Use a local pact file uri.");
                }

                pactFileJson = File.ReadAllText(PactFileUri);

                pactFile = JsonConvert.DeserializeObject <MessagePactFile>(pactFileJson);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(
                          String.Format("Json Pact file could not be retrieved using uri \'{0}\'.", PactFileUri), ex);
            }

            //Filter interactions
            if (description != null)
            {
                pactFile.Messages = pactFile.Messages.Where(x => x.Description.Equals(description));
            }

            if (providerState != null)
            {
                pactFile.Messages = pactFile.Messages.Where(x => x.ProviderState.Equals(providerState));
            }

            if ((description != null || providerState != null) &&
                (pactFile.Messages == null || !pactFile.Messages.Any()))
            {
                throw new ArgumentException(
                          "The specified description and/or providerState filter yielded no interactions.");
            }

            var loggerName = LogProvider.CurrentLogProvider.AddLogger(pactVerifierConfig.LogDir,
                                                                      ProviderName.ToLowerSnakeCase(), "{0}_verifier.log");

            pactVerifierConfig.LoggerName = loggerName;

            try
            {
                var validator = new MessageProviderValidator(new Reporter(pactVerifierConfig), pactVerifierConfig);
                validator.Validate(pactFile, ProviderStates);
            }
            finally
            {
                LogProvider.CurrentLogProvider.RemoveLogger(pactVerifierConfig.LoggerName);
            }
        }