module Lowdown::Mock
Provides a collection of test helpers.
This file is not loaded by default.
Public Class Methods
certificate(app_bundle_id)
click to toggle source
Generates a Certificate
configured with a self-signed Universal Certificate
.
@param (see Mock.ssl_certificate_and_key
)
@return [Certificate]
a Certificate configured with a self-signed certificate/key pair.
# File lib/lowdown/mock.rb, line 51 def self.certificate(app_bundle_id) Certificate.new(*ssl_certificate_and_key(app_bundle_id)) end
client(uri: nil, app_bundle_id: "com.example.MockApp", keep_alive: false)
click to toggle source
Generates a Client
with a mock {Connection} and a self-signed Universal Certificate
.
@param [URI, String] uri
the details to connect to the APN service.
@param [String] app_bundle_id
the App ID / app Bundle ID to encode into the certificate.
@return [Client]
a Client configured with the `uri` and a self-signed certificate that has the `app_bundle_id` encoded.
# File lib/lowdown/mock.rb, line 66 def self.client(uri: nil, app_bundle_id: "com.example.MockApp", keep_alive: false) certificate = certificate(app_bundle_id) connection = Connection.new(uri, certificate.ssl_context, keep_alive) connection.connect if keep_alive Client.client_with_connection(connection, certificate: certificate) end
ssl_certificate_and_key(app_bundle_id)
click to toggle source
Generates a self-signed Universal Certificate
.
@param [String] app_bundle_id
the App ID / app Bundle ID to encode into the certificate.
@return [Array<OpenSSL::X509::Certificate, OpenSSL::PKey::RSA>]
the self-signed certificate and private key.
# File lib/lowdown/mock.rb, line 21 def self.ssl_certificate_and_key(app_bundle_id) key = OpenSSL::PKey::RSA.new(1024) name = OpenSSL::X509::Name.parse("/UID=#{app_bundle_id}/CN=Stubbed APNS Certificate: #{app_bundle_id}") cert = OpenSSL::X509::Certificate.new cert.subject = name cert.not_before = Time.now cert.not_after = cert.not_before + 3600 cert.public_key = key.public_key cert.sign(key, OpenSSL::Digest::SHA1.new) # Make it a Universal Certificate ext_name = Lowdown::Certificate::UNIVERSAL_CERTIFICATE_EXTENSION ext_value = OpenSSL::ASN1::Sequence.new( [ OpenSSL::ASN1::UTF8String.new(app_bundle_id), OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::UTF8String.new("app")]), ] ).to_der cert.extensions = [OpenSSL::X509::Extension.new(ext_name, ext_value)] [cert, key] end