onstomp 1.0.0pre1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/README.md +1 -1
  2. data/Rakefile +8 -0
  3. data/examples/openuri.rb +36 -0
  4. data/lib/onstomp.rb +4 -0
  5. data/lib/onstomp/client.rb +6 -5
  6. data/lib/onstomp/components.rb +0 -1
  7. data/lib/onstomp/components/frame_headers.rb +35 -38
  8. data/lib/onstomp/components/threaded_processor.rb +13 -0
  9. data/lib/onstomp/connections/base.rb +15 -8
  10. data/lib/onstomp/connections/stomp_1.rb +0 -6
  11. data/lib/onstomp/connections/stomp_1_0.rb +8 -0
  12. data/lib/onstomp/connections/stomp_1_1.rb +8 -0
  13. data/lib/onstomp/failover.rb +16 -0
  14. data/lib/onstomp/failover/buffers.rb +8 -0
  15. data/lib/onstomp/failover/buffers/written.rb +91 -0
  16. data/lib/onstomp/failover/client.rb +127 -0
  17. data/lib/onstomp/failover/failover_configurable.rb +63 -0
  18. data/lib/onstomp/failover/failover_events.rb +96 -0
  19. data/lib/onstomp/failover/new_with_failover.rb +20 -0
  20. data/lib/onstomp/failover/pools.rb +8 -0
  21. data/lib/onstomp/failover/pools/base.rb +39 -0
  22. data/lib/onstomp/failover/pools/round_robin.rb +17 -0
  23. data/lib/onstomp/failover/uri.rb +34 -0
  24. data/lib/onstomp/interfaces/client_configurable.rb +2 -6
  25. data/lib/onstomp/interfaces/client_events.rb +4 -0
  26. data/lib/onstomp/interfaces/connection_events.rb +3 -3
  27. data/lib/onstomp/interfaces/event_manager.rb +8 -0
  28. data/lib/onstomp/interfaces/uri_configurable.rb +7 -7
  29. data/lib/onstomp/open-uri.rb +37 -0
  30. data/lib/onstomp/open-uri/client_extensions.rb +88 -0
  31. data/lib/onstomp/open-uri/message_queue.rb +38 -0
  32. data/lib/onstomp/version.rb +1 -1
  33. data/spec/onstomp/client_spec.rb +1 -4
  34. data/spec/onstomp/components/frame_headers_spec.rb +2 -5
  35. data/spec/onstomp/connections/stomp_1_0_spec.rb +22 -0
  36. data/spec/onstomp/connections/stomp_1_1_spec.rb +22 -0
  37. data/spec/onstomp/connections/stomp_1_spec.rb +2 -19
  38. data/spec/onstomp/connections_spec.rb +4 -0
  39. data/spec/onstomp/failover/buffers/written_spec.rb +8 -0
  40. data/spec/onstomp/failover/client_spec.rb +38 -0
  41. data/spec/onstomp/failover/failover_events_spec.rb +75 -0
  42. data/spec/onstomp/failover/new_with_failover_spec.rb +16 -0
  43. data/spec/onstomp/failover/pools/base_spec.rb +54 -0
  44. data/spec/onstomp/failover/pools/round_robin_spec.rb +27 -0
  45. data/spec/onstomp/failover/uri_spec.rb +21 -0
  46. data/spec/onstomp/full_stacks/failover_spec.rb +55 -0
  47. data/spec/onstomp/full_stacks/onstomp_spec.rb +15 -0
  48. data/spec/onstomp/full_stacks/open-uri_spec.rb +40 -0
  49. data/spec/onstomp/full_stacks/ssl/README +6 -0
  50. data/spec/onstomp/full_stacks/ssl/broker_cert.csr +17 -0
  51. data/spec/onstomp/full_stacks/ssl/broker_cert.pem +72 -0
  52. data/spec/onstomp/full_stacks/ssl/broker_key.pem +27 -0
  53. data/spec/onstomp/full_stacks/ssl/client_cert.csr +17 -0
  54. data/spec/onstomp/full_stacks/ssl/client_cert.pem +72 -0
  55. data/spec/onstomp/full_stacks/ssl/client_key.pem +27 -0
  56. data/spec/onstomp/full_stacks/ssl/demoCA/cacert.pem +17 -0
  57. data/spec/onstomp/full_stacks/ssl/demoCA/index.txt +2 -0
  58. data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.attr +1 -0
  59. data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.attr.old +1 -0
  60. data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.old +1 -0
  61. data/spec/onstomp/full_stacks/ssl/demoCA/newcerts/01.pem +72 -0
  62. data/spec/onstomp/full_stacks/ssl/demoCA/newcerts/02.pem +72 -0
  63. data/spec/onstomp/full_stacks/ssl/demoCA/private/cakey.pem +17 -0
  64. data/spec/onstomp/full_stacks/ssl/demoCA/serial +1 -0
  65. data/spec/onstomp/full_stacks/ssl/demoCA/serial.old +1 -0
  66. data/spec/onstomp/full_stacks/test_broker.rb +251 -0
  67. data/spec/onstomp/interfaces/connection_events_spec.rb +3 -1
  68. data/spec/onstomp/open-uri/client_extensions_spec.rb +113 -0
  69. data/spec/onstomp/open-uri/message_queue_spec.rb +29 -0
  70. data/spec/onstomp/open-uri_spec.rb +43 -0
  71. data/spec/spec_helper.rb +2 -0
  72. data/yard_extensions.rb +5 -1
  73. metadata +82 -8
  74. data/lib/onstomp/components/nil_processor.rb +0 -20
  75. data/spec/onstomp/components/nil_processor_spec.rb +0 -32
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "OnStomp::Client.new with failover", :failover => true do
5
+ describe "monkey patching OnStomp::Client" do
6
+ it "should return a failover client if given an array" do
7
+ OnStomp::Client.new(['stomp:///', 'stomp+ssl:///']).should be_a_kind_of(OnStomp::Failover::Client)
8
+ end
9
+ it "should return a failover client if given a failover: URI" do
10
+ OnStomp::Client.new('failover:(stomp:///,stomp+ssl:///)').should be_a_kind_of(OnStomp::Failover::Client)
11
+ end
12
+ it "should be a regular client otherwise" do
13
+ OnStomp::Client.new('stomp:///').should be_a_kind_of(OnStomp::Client)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module OnStomp::Failover::Pools
5
+ describe Base, :failover => true do
6
+ let(:clients) { mock('clients') }
7
+ let(:pool) {
8
+ Base.new([]).tap do |p|
9
+ p.stub(:clients => clients)
10
+ end
11
+ }
12
+
13
+ describe ".initialize" do
14
+ it "should create a new Client for each URI" do
15
+ OnStomp::Client.should_receive(:new).with('1').and_return('c 1')
16
+ OnStomp::Client.should_receive(:new).with('2').and_return('c 2')
17
+ OnStomp::Client.should_receive(:new).with('3').and_return('c 3')
18
+ new_pool = Base.new ['1', '2', '3']
19
+ new_pool.clients.should =~ ['c 1', 'c 2', 'c 3']
20
+ end
21
+ end
22
+
23
+ describe ".shuffle!" do
24
+ it "should shuffle the clients" do
25
+ clients.should_receive(:shuffle!)
26
+ pool.shuffle!
27
+ end
28
+ end
29
+
30
+ describe ".next_client" do
31
+ it "should raise an error because it's up to subclasses to implement this warlock" do
32
+ lambda {
33
+ pool.next_client
34
+ }.should raise_error
35
+ end
36
+ end
37
+
38
+ describe ".each" do
39
+ it "should raise an error if no block is given (not sure why, honestly)" do
40
+ # I think in the past, this method was synchronized, and that's why
41
+ # I raise an error, but it may not be necessary anymore
42
+ lambda {
43
+ pool.each
44
+ }.should raise_error
45
+ end
46
+ it "should evaluate the block against the clients" do
47
+ clients.should_receive(:each).and_yield('c1')
48
+ yielded = []
49
+ pool.each { |c| yielded << c }
50
+ yielded.should == ['c1']
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module OnStomp::Failover::Pools
5
+ describe RoundRobin, :failover => true do
6
+ let(:clients) {
7
+ [ '1', '2', '3']
8
+ }
9
+ let(:pool) {
10
+ RoundRobin.new([]).tap do |p|
11
+ p.stub(:clients => clients)
12
+ end
13
+ }
14
+
15
+ describe ".next_client" do
16
+ it "should return clients in order and cycle" do
17
+ pool.next_client.should == '1'
18
+ pool.next_client.should == '2'
19
+ pool.next_client.should == '3'
20
+ pool.next_client.should == '1'
21
+ pool.next_client.should == '2'
22
+ pool.next_client.should == '3'
23
+ pool.next_client.should == '1'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module OnStomp::Failover
5
+ describe URI, :failover => true do
6
+ describe "parsing failover: URIs" do
7
+ it "should parse the string and the internal URIs" do
8
+ uri = ::URI.parse('failover:(stomp://host.domain.tld,stomp+ssl:///?param=value&param2=value2,stomp://user:pass@other.host.tld)?param=blah&param2=testing')
9
+ uri.query.should == 'param=blah&param2=testing'
10
+ uri.failover_uris.map { |u| u.scheme }.should == ['stomp', 'stomp+ssl', 'stomp']
11
+ uri.failover_uris.map { |u| u.host }.should == ['host.domain.tld', nil, 'other.host.tld']
12
+ uri.failover_uris.map { |u| u.query }.should == [nil, 'param=value&param2=value2', nil]
13
+ end
14
+ it "should raise an error if the failover URI doesn't match regex" do
15
+ lambda {
16
+ ::URI.parse('failover://stomp://host.domain.tld,stomp+ssl://sunday.after.you')
17
+ }.should raise_error(OnStomp::Failover::InvalidFailoverURIError)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require File.expand_path('../test_broker', __FILE__)
4
+
5
+ describe OnStomp::Failover, "full stack test", :fullstack => true, :failover => true do
6
+ let(:broker) {
7
+ TestBroker.new
8
+ }
9
+ before(:each) do
10
+ broker.start
11
+ end
12
+ after(:each) do
13
+ broker.stop
14
+ end
15
+
16
+ describe "failing over" do
17
+ it "should do something worthwhile" do
18
+ committed = false
19
+ killed = false
20
+
21
+ client = OnStomp::Failover::Client.new('failover:(stomp:///,stomp:///)')
22
+ client.on_commit do |c|
23
+ committed = true
24
+ end
25
+ client.on_subscribe do |s, rc|
26
+ broker.kill_sessions unless killed
27
+ killed = true
28
+ client.send '/queue/onstomp/failover/test', 'are you receiving?',
29
+ :'x-onstomp-real-client' => rc.object_id
30
+ end
31
+
32
+ client.connect
33
+ client.send '/queue/onstomp/failover/test', '4-3-2-1 Earth Below Me',
34
+ :'x-onstomp-real-client' => client.active_client.object_id
35
+ client.begin 't-1234', :'x-onstomp-real-client' => client.active_client.object_id
36
+ client.send '/queue/onstomp/failover/test', 'hello major tom',
37
+ :transaction => 't-1234', :'x-onstomp-real-client' => client.active_client.object_id
38
+ client.subscribe('/queue/onstomp/failover/test', :'x-onstomp-real-client' => client.active_client.object_id) do |m|
39
+ end
40
+ Thread.pass while client.connected?
41
+
42
+ client.send '/queue/onstomp/failover/test', 'Are you receiving?',
43
+ :'x-onstomp-real-client' => client.active_client.object_id
44
+ sub = client.subscribe('/queue/onstomp/failover/test2', :'x-onstomp-real-client' => client.active_client.object_id) do |m|
45
+ end
46
+ client.unsubscribe sub, :'x-onstomp-real-client' => client.active_client.object_id
47
+ client.commit 't-1234', :'x-onstomp-real-client' => client.active_client.object_id
48
+ # This is not waiting for debuffering?
49
+ client.disconnect :'x-onstomp-real-client' => client.active_client.object_id
50
+ broker.join
51
+ killed.should be_true
52
+ committed.should be_true
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require File.expand_path('../test_broker', __FILE__)
4
+
5
+ describe OnStomp::Client, "full stack test", :fullstack => true do
6
+ let(:broker) {
7
+ TestBroker.new
8
+ }
9
+ before(:each) do
10
+ broker.start
11
+ end
12
+ after(:each) do
13
+ broker.stop
14
+ end
15
+ end
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require File.expand_path('../test_broker', __FILE__)
4
+
5
+ describe OnStomp::OpenURI, "full stack test", :fullstack => true, :openuri => true do
6
+ let(:broker) {
7
+ TestBroker.new
8
+ }
9
+ before(:each) do
10
+ broker.start
11
+ end
12
+ after(:each) do
13
+ broker.stop
14
+ end
15
+
16
+ describe "opening URIs" do
17
+ it "should deliver some SEND frames" do
18
+ open("stomp://localhost/queue/onstomp/open-uri/test") do |c|
19
+ c.send "Test Message 1"
20
+ c.send "Another Test Message"
21
+ end
22
+ broker.join
23
+ broker.bodies_for("/queue/onstomp/open-uri/test").should ==
24
+ [ "Test Message 1", "Another Test Message" ]
25
+ end
26
+
27
+ it "should receive the some MESSAGE frames" do
28
+ open("stomp://localhost/queue/onstomp/open-uri/test") do |c|
29
+ c.send "Test Message 1"
30
+ c.send "Another Test Message"
31
+ c.send "Last Message"
32
+
33
+ c.first.body.should == "Test Message 1"
34
+ c.first(2).map { |m| m.body }.should ==
35
+ [ "Another Test Message", "Last Message" ]
36
+ end
37
+ broker.join
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ These are all the SSL certificates / keys needed for testing SSL connectivity
2
+ with stomper. The CA key file is protected with the pass phrase "testing"
3
+ The file broker_cert.pem is a copy of demoCA/newcerts/01.pem.
4
+ The file client_cert.pem is a copy of demoCA/newcerts/02.pem.
5
+
6
+ All keys, certificates and signing requests were created using OpenSSL 1.0.0c
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICuzCCAaMCAQAwdjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5vd2hlcmVzMRAw
3
+ DgYDVQQHDAdTdG9tcGVyMRgwFgYDVQQKDA9TdG9tcGVyIFRlc3RpbmcxFDASBgNV
4
+ BAsMC1NTTCBUZXN0aW5nMRIwEAYDVQQDDAlNeSBCcm9rZXIwggEiMA0GCSqGSIb3
5
+ DQEBAQUAA4IBDwAwggEKAoIBAQDr3b4th1QTzkzhvcnI4BiwUPEwyG4ierzG6j/i
6
+ xCTZjEGUVNTge1xs3b1Bj72qmMLw6RN+NlqXV+RqBAiqEitoS51aQJJBV1su0uH0
7
+ +MQx3WwtTBKrgHJxOU6qFLj2NegHn6KjuKYIjWDVUwE4jKoX6bCzjOPZTRQC2pr/
8
+ b1tlusNWgLDejsglPxugrIAcOOB3TsZdkkSXw/i6mgKDqBtXOzjWfX+VhvTC3lHQ
9
+ 7qEwtDma9lgDYpOUpXJyolx+z1R/V5JG+PexeVYgvZUl1RFdwFzHzc9Ej4ho4W/A
10
+ yi7b/NAZgjaxPyCC386mVUQCUYtsT6Ems0HoC6gMj2dlku7fAgMBAAGgADANBgkq
11
+ hkiG9w0BAQUFAAOCAQEATXSzaRT7a490U5wXRRSInbFOBe21eTGb63bCwN7RBTV3
12
+ W9CE2b2nDkomFt9BmlFn+/+adzNlyRBV/qq0nwBpNI0tZURfz3Voxt0KhcooX+SD
13
+ uRrS3/JHONjdSpXVPIlrq5FXe4HkMzgj00JXKkO/pYL+WhZKhY0m1pRr/+9B7QMu
14
+ bm9blUo2HSkhnmVMfbMIV17H5npBYrZj+XgE0BdwX+5N05HpO+OaLFUc9qz8ZYWh
15
+ nwx3MjHIBHsPbmZJ88qQr/EvXxuuVdEOvMvvUBATgOfw9gruFXeLbZ3Jo1GN/WnY
16
+ XApL545jeEmUNDYvWFVcuQI1zjeLsdrboclH3Tlqkg==
17
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,72 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 1 (0x1)
5
+ Signature Algorithm: sha1WithRSAEncryption
6
+ Issuer: C=US, ST=Nowheres, L=Stomper, O=Stomper Testing, OU=CA Testing, CN=Stomper CA
7
+ Validity
8
+ Not Before: Feb 21 16:50:01 2011 GMT
9
+ Not After : Feb 18 16:50:01 2021 GMT
10
+ Subject: C=US, ST=Nowheres, O=Stomper Testing, OU=SSL Testing, CN=My Broker
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ Public-Key: (2048 bit)
14
+ Modulus:
15
+ 00:eb:dd:be:2d:87:54:13:ce:4c:e1:bd:c9:c8:e0:
16
+ 18:b0:50:f1:30:c8:6e:22:7a:bc:c6:ea:3f:e2:c4:
17
+ 24:d9:8c:41:94:54:d4:e0:7b:5c:6c:dd:bd:41:8f:
18
+ bd:aa:98:c2:f0:e9:13:7e:36:5a:97:57:e4:6a:04:
19
+ 08:aa:12:2b:68:4b:9d:5a:40:92:41:57:5b:2e:d2:
20
+ e1:f4:f8:c4:31:dd:6c:2d:4c:12:ab:80:72:71:39:
21
+ 4e:aa:14:b8:f6:35:e8:07:9f:a2:a3:b8:a6:08:8d:
22
+ 60:d5:53:01:38:8c:aa:17:e9:b0:b3:8c:e3:d9:4d:
23
+ 14:02:da:9a:ff:6f:5b:65:ba:c3:56:80:b0:de:8e:
24
+ c8:25:3f:1b:a0:ac:80:1c:38:e0:77:4e:c6:5d:92:
25
+ 44:97:c3:f8:ba:9a:02:83:a8:1b:57:3b:38:d6:7d:
26
+ 7f:95:86:f4:c2:de:51:d0:ee:a1:30:b4:39:9a:f6:
27
+ 58:03:62:93:94:a5:72:72:a2:5c:7e:cf:54:7f:57:
28
+ 92:46:f8:f7:b1:79:56:20:bd:95:25:d5:11:5d:c0:
29
+ 5c:c7:cd:cf:44:8f:88:68:e1:6f:c0:ca:2e:db:fc:
30
+ d0:19:82:36:b1:3f:20:82:df:ce:a6:55:44:02:51:
31
+ 8b:6c:4f:a1:26:b3:41:e8:0b:a8:0c:8f:67:65:92:
32
+ ee:df
33
+ Exponent: 65537 (0x10001)
34
+ X509v3 extensions:
35
+ X509v3 Basic Constraints:
36
+ CA:FALSE
37
+ Netscape Comment:
38
+ OpenSSL Generated Certificate
39
+ X509v3 Subject Key Identifier:
40
+ 5C:28:4D:B8:A3:D7:CB:43:2C:1C:DB:0F:7B:75:99:85:44:4E:D8:A1
41
+ X509v3 Authority Key Identifier:
42
+ keyid:7C:4F:50:BF:C6:57:97:6B:D9:1C:F1:92:EF:B5:66:47:94:79:15:74
43
+
44
+ Signature Algorithm: sha1WithRSAEncryption
45
+ 51:2f:da:d1:a4:9f:97:77:00:69:bb:04:85:34:75:bd:2e:ad:
46
+ 45:83:a7:95:f1:83:5d:52:1e:65:79:ee:5b:a0:f5:7b:82:53:
47
+ 88:c3:fc:89:c8:4f:68:4e:80:8a:cb:53:4f:44:a8:6d:8c:be:
48
+ be:74:19:ff:75:52:14:3b:70:42:87:cf:fc:90:58:7e:c9:cd:
49
+ d4:a2:b8:15:74:e8:51:ce:9c:73:ca:a5:29:76:4a:f3:a4:26:
50
+ f3:70:c5:8e:5f:cf:fe:7d:81:de:43:9e:36:c0:87:7b:66:02:
51
+ 7f:02:2d:64:48:19:be:74:4a:27:cd:c5:56:c5:ff:96:1a:02:
52
+ 3a:2f
53
+ -----BEGIN CERTIFICATE-----
54
+ MIIDTzCCArigAwIBAgIBATANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJVUzER
55
+ MA8GA1UECAwITm93aGVyZXMxEDAOBgNVBAcMB1N0b21wZXIxGDAWBgNVBAoMD1N0
56
+ b21wZXIgVGVzdGluZzETMBEGA1UECwwKQ0EgVGVzdGluZzETMBEGA1UEAwwKU3Rv
57
+ bXBlciBDQTAeFw0xMTAyMjExNjUwMDFaFw0yMTAyMTgxNjUwMDFaMGQxCzAJBgNV
58
+ BAYTAlVTMREwDwYDVQQIDAhOb3doZXJlczEYMBYGA1UECgwPU3RvbXBlciBUZXN0
59
+ aW5nMRQwEgYDVQQLDAtTU0wgVGVzdGluZzESMBAGA1UEAwwJTXkgQnJva2VyMIIB
60
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA692+LYdUE85M4b3JyOAYsFDx
61
+ MMhuInq8xuo/4sQk2YxBlFTU4HtcbN29QY+9qpjC8OkTfjZal1fkagQIqhIraEud
62
+ WkCSQVdbLtLh9PjEMd1sLUwSq4BycTlOqhS49jXoB5+io7imCI1g1VMBOIyqF+mw
63
+ s4zj2U0UAtqa/29bZbrDVoCw3o7IJT8boKyAHDjgd07GXZJEl8P4upoCg6gbVzs4
64
+ 1n1/lYb0wt5R0O6hMLQ5mvZYA2KTlKVycqJcfs9Uf1eSRvj3sXlWIL2VJdURXcBc
65
+ x83PRI+IaOFvwMou2/zQGYI2sT8ggt/OplVEAlGLbE+hJrNB6AuoDI9nZZLu3wID
66
+ AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
67
+ YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUXChNuKPXy0MsHNsPe3WZhURO2KEw
68
+ HwYDVR0jBBgwFoAUfE9Qv8ZXl2vZHPGS77VmR5R5FXQwDQYJKoZIhvcNAQEFBQAD
69
+ gYEAUS/a0aSfl3cAabsEhTR1vS6tRYOnlfGDXVIeZXnuW6D1e4JTiMP8ichPaE6A
70
+ istTT0SobYy+vnQZ/3VSFDtwQofP/JBYfsnN1KK4FXToUc6cc8qlKXZK86Qm83DF
71
+ jl/P/n2B3kOeNsCHe2YCfwItZEgZvnRKJ83FVsX/lhoCOi8=
72
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEA692+LYdUE85M4b3JyOAYsFDxMMhuInq8xuo/4sQk2YxBlFTU
3
+ 4HtcbN29QY+9qpjC8OkTfjZal1fkagQIqhIraEudWkCSQVdbLtLh9PjEMd1sLUwS
4
+ q4BycTlOqhS49jXoB5+io7imCI1g1VMBOIyqF+mws4zj2U0UAtqa/29bZbrDVoCw
5
+ 3o7IJT8boKyAHDjgd07GXZJEl8P4upoCg6gbVzs41n1/lYb0wt5R0O6hMLQ5mvZY
6
+ A2KTlKVycqJcfs9Uf1eSRvj3sXlWIL2VJdURXcBcx83PRI+IaOFvwMou2/zQGYI2
7
+ sT8ggt/OplVEAlGLbE+hJrNB6AuoDI9nZZLu3wIDAQABAoIBAQCkcckx/PQFiwPX
8
+ L3cL8hHEe+ps1JDUwTX0iUVZWN9IPZ1LSYnRqLBbxo04tHrMAg2H4TiR+ltWwRSj
9
+ RYS07k4NPQrL7dEKdVlBYA3hub8v9OyC+FLb94XSot3Rfvklz5eiGQ5Pj2FS/R7S
10
+ HDjxsEC2w1tLE6OX0UFua/M8u+rBFQpQw/mn07pxrTl2FzSsqCDU36ZU8MyFjlqy
11
+ J62n6s2gFF18CoNyGRyFbLMr3iAJ0LZ66L/O5Y/7uZLzl21F7mR9ednITp922Dkc
12
+ neNsFD/0lV15VTDo4MvTAOYtxmSLdODfBUWIrdiTBwpOCx4Y3c3ws0uMmXNeT2EJ
13
+ mUK0/ORhAoGBAP8mTjOn3+msZ1vxCljrUXjqgMZdJkuxMg9z4lEcqriy0z4JyNw7
14
+ ASesaxj/exPAfFjK+16Lshv3WjoJ/erZyMcSzrTFTl/tBOePIEnwK4h1cCW1FajD
15
+ nt9TJeHNcbw3igVV3WfQonvXqfEJ0Gf1xOwHfWzZa3O4LpD+UGL4RP0DAoGBAOym
16
+ /BWQbluP3FNPiBiaL5qp6e2wSQDGr34Dw0fN5e9SZLipp6pAs8BSWP9xac3ke2DT
17
+ ZCI8KIGltiw1735G21SiqpNQcyCIdmeBMVzQRu0xEv/WZYf6x1psdXgKRMfLJOPM
18
+ PNF9EOdyzeTYFEnoT7dngOVkwvQhR/iu8Sj3cpn1AoGBAImcDT1K4zbSJwStYdlH
19
+ QS+nukBB6O+V59vxsjPw9BqdR9UDzfMJV7wf/7sBv02N2QLCpwP879ipdV4sGWha
20
+ gTDs8dMJPxX5bVW+GboG8FOukwejPMVCjCMCY0H/XcIXajcqcjkViyyjyiIYGvCW
21
+ 2tg5yem08YD96w+EObLHF94lAoGBAOv90WCHuSVhnqsNooA2McagLoEyzHoTqCmY
22
+ AwL11pgDqCFmPabQAvCEre99367MbCSwaSiiqRowcCxCVOOuMUaDOGrTTRtiOgEZ
23
+ mmod4LzjtTifSnyBno8TnUjppJFAiTcJEpUtjM/hcmUE/aZ+HhCdDLK0+pyNG8Jo
24
+ YmEh8YyJAoGAZ8TdHi2X60xXZi5iEmuy2fA2NVrCzh9CTu63Op9jztv+z91zHvwx
25
+ nKP1Xf9oXm0M0uJU/7iICaS1yzTzs6cnZ7z0awpI4HDMS50zIRwut8I5mPRAeqow
26
+ iZajmbchg/M3/lTommi54WM2OxjaXWZEncHG13acBh0/1SYYRccJW9Y=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICuzCCAaMCAQAwdjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5vd2hlcmVzMRAw
3
+ DgYDVQQHDAdTdG9tcGVyMRgwFgYDVQQKDA9TdG9tcGVyIFRlc3RpbmcxFDASBgNV
4
+ BAsMC1NTTCBUZXN0aW5nMRIwEAYDVQQDDAlNeSBDbGllbnQwggEiMA0GCSqGSIb3
5
+ DQEBAQUAA4IBDwAwggEKAoIBAQCvYq3qCys9pg7jSrK1ujKlq1/y8FqDIkz/BZ2+
6
+ JbtoYfVWLiKcK/k7opc3qjcXQM0Sl3ZzGSTFWXhFRV0rnN/p0lbXXLnKU3OhYnDf
7
+ Uq/7fWu3aHoIaOhKq1rp5qTNOJ0uVVERSDwrV6hVN0IRDOks53nTTMgunpJK3Itm
8
+ eb9i4HVJ1zdiTjpHesAvdYwocFCIJK566y+md2Bkdw3iwk7lYgX6JyBcU3KAFuav
9
+ 9TVaqWpfYAUq2P6ppC2qxIE1/FGKfJ8MQOpAYYfsCmA5RC6w9nd5Aba/FdJlzWrk
10
+ IQVZU9lq5zfqzqOxz8Nw/CxAPRK/+YQyyoPG5T2qKP94nQMXAgMBAAGgADANBgkq
11
+ hkiG9w0BAQUFAAOCAQEAAY/U48PqKy3E2xn0bvY/4xgmOglmYhoGVxs9atObzL+M
12
+ NvQkKMX63MFID66yJUWU9cUAuBtb+RdUdP9gby0IME/3SH4EHanGQZ6+PK931WtH
13
+ TiKiE+LV2njxC8XTA7scbe5QnZwp04mTgiNfFnRLU3whfAWu9wKsU8t2LTpgaOX4
14
+ UYJrk7eaPdqSCDpx6Vf2Z5oCLka93te2NB8BvcxH2ISYiDQ5WdOpxbP8ngHkq3JQ
15
+ RJSHYYxr6BKIzLJP7MCrebKcrIE3QJ+/n1KAWl9M52m7rqmSBcevdM9lERgKvjwK
16
+ AYuVlQJs+mNbhN0OudSG0dNIJN+i2lHAWRz9FzAM9A==
17
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,72 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 2 (0x2)
5
+ Signature Algorithm: sha1WithRSAEncryption
6
+ Issuer: C=US, ST=Nowheres, L=Stomper, O=Stomper Testing, OU=CA Testing, CN=Stomper CA
7
+ Validity
8
+ Not Before: Feb 21 16:57:25 2011 GMT
9
+ Not After : Feb 18 16:57:25 2021 GMT
10
+ Subject: C=US, ST=Nowheres, O=Stomper Testing, OU=SSL Testing, CN=My Client
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ Public-Key: (2048 bit)
14
+ Modulus:
15
+ 00:af:62:ad:ea:0b:2b:3d:a6:0e:e3:4a:b2:b5:ba:
16
+ 32:a5:ab:5f:f2:f0:5a:83:22:4c:ff:05:9d:be:25:
17
+ bb:68:61:f5:56:2e:22:9c:2b:f9:3b:a2:97:37:aa:
18
+ 37:17:40:cd:12:97:76:73:19:24:c5:59:78:45:45:
19
+ 5d:2b:9c:df:e9:d2:56:d7:5c:b9:ca:53:73:a1:62:
20
+ 70:df:52:af:fb:7d:6b:b7:68:7a:08:68:e8:4a:ab:
21
+ 5a:e9:e6:a4:cd:38:9d:2e:55:51:11:48:3c:2b:57:
22
+ a8:55:37:42:11:0c:e9:2c:e7:79:d3:4c:c8:2e:9e:
23
+ 92:4a:dc:8b:66:79:bf:62:e0:75:49:d7:37:62:4e:
24
+ 3a:47:7a:c0:2f:75:8c:28:70:50:88:24:ae:7a:eb:
25
+ 2f:a6:77:60:64:77:0d:e2:c2:4e:e5:62:05:fa:27:
26
+ 20:5c:53:72:80:16:e6:af:f5:35:5a:a9:6a:5f:60:
27
+ 05:2a:d8:fe:a9:a4:2d:aa:c4:81:35:fc:51:8a:7c:
28
+ 9f:0c:40:ea:40:61:87:ec:0a:60:39:44:2e:b0:f6:
29
+ 77:79:01:b6:bf:15:d2:65:cd:6a:e4:21:05:59:53:
30
+ d9:6a:e7:37:ea:ce:a3:b1:cf:c3:70:fc:2c:40:3d:
31
+ 12:bf:f9:84:32:ca:83:c6:e5:3d:aa:28:ff:78:9d:
32
+ 03:17
33
+ Exponent: 65537 (0x10001)
34
+ X509v3 extensions:
35
+ X509v3 Basic Constraints:
36
+ CA:FALSE
37
+ Netscape Comment:
38
+ OpenSSL Generated Certificate
39
+ X509v3 Subject Key Identifier:
40
+ 7A:FC:5D:4F:48:8F:41:43:EA:E5:A6:14:2D:30:19:E5:63:70:43:5C
41
+ X509v3 Authority Key Identifier:
42
+ keyid:7C:4F:50:BF:C6:57:97:6B:D9:1C:F1:92:EF:B5:66:47:94:79:15:74
43
+
44
+ Signature Algorithm: sha1WithRSAEncryption
45
+ 75:80:be:12:d8:7d:64:78:1f:62:97:a9:cd:0a:84:89:15:43:
46
+ ca:5b:a3:72:77:73:f1:aa:06:59:15:75:0b:1b:7d:79:c3:9f:
47
+ d5:3d:e5:70:df:64:ec:a4:27:d9:a3:49:02:b0:75:89:bd:dc:
48
+ 9b:c4:79:33:14:38:93:2b:d8:3c:01:e6:d0:2a:56:06:6a:ba:
49
+ 49:56:5a:f7:6c:49:dd:b0:5c:49:be:68:09:7d:75:2e:9f:49:
50
+ ed:e1:1e:49:6b:f1:cc:1c:1c:be:1e:ac:a9:ee:44:7b:15:32:
51
+ e0:b1:a6:9c:48:a4:1c:5a:55:66:0f:86:95:c0:02:e8:b7:a8:
52
+ b9:9d
53
+ -----BEGIN CERTIFICATE-----
54
+ MIIDTzCCArigAwIBAgIBAjANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJVUzER
55
+ MA8GA1UECAwITm93aGVyZXMxEDAOBgNVBAcMB1N0b21wZXIxGDAWBgNVBAoMD1N0
56
+ b21wZXIgVGVzdGluZzETMBEGA1UECwwKQ0EgVGVzdGluZzETMBEGA1UEAwwKU3Rv
57
+ bXBlciBDQTAeFw0xMTAyMjExNjU3MjVaFw0yMTAyMTgxNjU3MjVaMGQxCzAJBgNV
58
+ BAYTAlVTMREwDwYDVQQIDAhOb3doZXJlczEYMBYGA1UECgwPU3RvbXBlciBUZXN0
59
+ aW5nMRQwEgYDVQQLDAtTU0wgVGVzdGluZzESMBAGA1UEAwwJTXkgQ2xpZW50MIIB
60
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr2Kt6gsrPaYO40qytboypatf
61
+ 8vBagyJM/wWdviW7aGH1Vi4inCv5O6KXN6o3F0DNEpd2cxkkxVl4RUVdK5zf6dJW
62
+ 11y5ylNzoWJw31Kv+31rt2h6CGjoSqta6eakzTidLlVREUg8K1eoVTdCEQzpLOd5
63
+ 00zILp6SStyLZnm/YuB1Sdc3Yk46R3rAL3WMKHBQiCSueusvpndgZHcN4sJO5WIF
64
+ +icgXFNygBbmr/U1WqlqX2AFKtj+qaQtqsSBNfxRinyfDEDqQGGH7ApgOUQusPZ3
65
+ eQG2vxXSZc1q5CEFWVPZauc36s6jsc/DcPwsQD0Sv/mEMsqDxuU9qij/eJ0DFwID
66
+ AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
67
+ YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUevxdT0iPQUPq5aYULTAZ5WNwQ1ww
68
+ HwYDVR0jBBgwFoAUfE9Qv8ZXl2vZHPGS77VmR5R5FXQwDQYJKoZIhvcNAQEFBQAD
69
+ gYEAdYC+Eth9ZHgfYpepzQqEiRVDylujcndz8aoGWRV1Cxt9ecOf1T3lcN9k7KQn
70
+ 2aNJArB1ib3cm8R5MxQ4kyvYPAHm0CpWBmq6SVZa92xJ3bBcSb5oCX11Lp9J7eEe
71
+ SWvxzBwcvh6sqe5EexUy4LGmnEikHFpVZg+GlcAC6LeouZ0=
72
+ -----END CERTIFICATE-----