【问题标题】:Encoded / Encrypted body before verifying a Pact验证协议之前的编码/加密正文
【发布时间】:2019-04-01 04:45:24
【问题描述】:

我需要集成的服务器返回其编码为 JWT 的答案。更糟糕的是,响应正文实际上是一个 json,格式为:

{d: token} with token = JWT.encode({id: 123, field: "John", etc.})

我想对解码令牌的内容使用协议验证。我知道我可以轻松地签订协议来验证我是否返回了 {d: string},但我无法对字符串进行完全匹配(因为 JWT 包含一些不同的 ID)。我想要的是以下内容,它假定添加了新的 Pact.JWT 功能。

my_provider. upon_receiving('my request') .with(method: :post, path: '/order', headers: {'Content-Type' => 'application/json'} ).will_respond_with( status: 200, headers: {'Content-Type' => 'application/json; charset=utf-8'}, body: { d: Pact::JWT( { id: Pact.like(123), field: Pact.term(generate: "John", matcher: /J.*/ },signing_key,algo ) })

略加这个Pact::JWT,有没有办法达到这种效果?

我已经在使用协议代理来运行我的验证。我知道您可以在发送验证之前修改请求 (How do I verify pacts against an API that requires an auth token?)。从代理服务器收到请求后,您可以修改请求吗?

如果是这样,我可以计划以下工作:

  • 我的实际代码中的一个开关,有时期望答案被解码而不是在 JWT 中
  • 在关闭开关的情况下运行我的测试一次(正常的代码行为,模拟返回已编码的 JWT 数据。
  • 在关闭开关的情况下再次运行我的测试(代码期望数据已经解码,模拟返回解码数据。)
  • 使用第二次运行的合同 json
  • 挂钩代理:验证任务以即时解码 JWT,并使用现有协议机制进行验证。 (我不知道该怎么做的步骤)。

我的代码是 ruby​​ 的。我无权访问提供商。

任何建议表示赞赏!谢谢

【问题讨论】:

    标签: pact pact-ruby


    【解决方案1】:

    您可以使用(另一个)代理应用修改请求或响应。​​

    class ProxyApp
    
      def initialize real_provider_app
        @real_provider_app = real_provider_app
      end
    
      def call env
        response = @real_provider_app.call(env)
        # modify response here
        response
      end
    end
    
    Pact.service_provider "My Service Provider" do
      app { ProxyApp.new(RealApp) }
    end
    

    【讨论】:

    • Pact.service_provider 进入提供程序代码(如果有的话),并且需要一个 require 'pact/provider' 对于 Rails,应用程序在 config/application 中定义,其中您有模块 MyAppName 类 Application ,你会想要 MyAppName::Application 这回答了它,虽然我没有使用它,而是我已经分叉了 pact-support 以添加对 Pact.Jwt 对象的支持。
    【解决方案2】:

    Pact 作为一种工具,我不希望它开箱即用地提供这种行为。

    在我看来,最好的是,

    • 不要仅为测试更改源代码
    • 确保您的测试仅验证编码的 json(在测试中生成编码的预期 json 并用实际验证)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2010-10-07
      • 2015-01-22
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多