stomper 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/.gitignore +5 -0
  2. data/{spec/spec.opts → .rspec} +0 -2
  3. data/Gemfile +4 -0
  4. data/LICENSE +201 -201
  5. data/README.md +130 -0
  6. data/Rakefile +5 -0
  7. data/examples/basic.rb +38 -0
  8. data/examples/events.rb +54 -0
  9. data/features/acking_messages.feature +147 -0
  10. data/features/disconnecting.feature +12 -0
  11. data/features/establish_connection.feature +44 -0
  12. data/features/protocol_version_negotiation.feature +61 -0
  13. data/features/receipts.feature +72 -0
  14. data/features/scopes.feature +32 -0
  15. data/features/secure_connections.feature +38 -0
  16. data/features/send_and_message.feature +28 -0
  17. data/features/steps/acking_messages_steps.rb +39 -0
  18. data/features/steps/disconnecting_steps.rb +8 -0
  19. data/features/steps/establish_connection_steps.rb +74 -0
  20. data/features/steps/frame_transmission_steps.rb +35 -0
  21. data/features/steps/protocol_version_negotiation_steps.rb +15 -0
  22. data/features/steps/receipts_steps.rb +79 -0
  23. data/features/steps/scopes_steps.rb +52 -0
  24. data/features/steps/secure_connections_steps.rb +41 -0
  25. data/features/steps/send_and_message_steps.rb +35 -0
  26. data/features/steps/subscribing_steps.rb +36 -0
  27. data/features/steps/threaded_receiver_steps.rb +8 -0
  28. data/features/steps/transactions_steps.rb +0 -0
  29. data/features/subscribing.feature +151 -0
  30. data/features/support/env.rb +11 -0
  31. data/features/support/header_helpers.rb +12 -0
  32. data/features/support/ssl/README +6 -0
  33. data/features/support/ssl/broker_cert.csr +17 -0
  34. data/features/support/ssl/broker_cert.pem +72 -0
  35. data/features/support/ssl/broker_key.pem +27 -0
  36. data/features/support/ssl/client_cert.csr +17 -0
  37. data/features/support/ssl/client_cert.pem +72 -0
  38. data/features/support/ssl/client_key.pem +27 -0
  39. data/features/support/ssl/demoCA/cacert.pem +17 -0
  40. data/features/support/ssl/demoCA/index.txt +2 -0
  41. data/features/support/ssl/demoCA/index.txt.attr +1 -0
  42. data/features/support/ssl/demoCA/index.txt.attr.old +1 -0
  43. data/features/support/ssl/demoCA/index.txt.old +1 -0
  44. data/features/support/ssl/demoCA/newcerts/01.pem +72 -0
  45. data/features/support/ssl/demoCA/newcerts/02.pem +72 -0
  46. data/features/support/ssl/demoCA/private/cakey.pem +17 -0
  47. data/features/support/ssl/demoCA/serial +1 -0
  48. data/features/support/ssl/demoCA/serial.old +1 -0
  49. data/features/support/test_stomp_server.rb +150 -0
  50. data/features/threaded_receiver.feature +11 -0
  51. data/features/transactions.feature +66 -0
  52. data/lib/stomper.rb +30 -20
  53. data/lib/stomper/connection.rb +442 -102
  54. data/lib/stomper/errors.rb +59 -0
  55. data/lib/stomper/extensions.rb +10 -0
  56. data/lib/stomper/extensions/common.rb +258 -0
  57. data/lib/stomper/extensions/events.rb +213 -0
  58. data/lib/stomper/extensions/heartbeat.rb +101 -0
  59. data/lib/stomper/extensions/scoping.rb +56 -0
  60. data/lib/stomper/frame.rb +54 -0
  61. data/lib/stomper/frame_serializer.rb +217 -0
  62. data/lib/stomper/headers.rb +15 -0
  63. data/lib/stomper/receipt_manager.rb +36 -0
  64. data/lib/stomper/receivers.rb +7 -0
  65. data/lib/stomper/receivers/threaded.rb +71 -0
  66. data/lib/stomper/scopes.rb +9 -0
  67. data/lib/stomper/scopes/header_scope.rb +49 -0
  68. data/lib/stomper/scopes/receipt_scope.rb +44 -0
  69. data/lib/stomper/scopes/transaction_scope.rb +109 -0
  70. data/lib/stomper/sockets.rb +66 -28
  71. data/lib/stomper/subscription_manager.rb +79 -0
  72. data/lib/stomper/support.rb +68 -0
  73. data/lib/stomper/support/1.8/frame_serializer.rb +53 -0
  74. data/lib/stomper/support/1.8/headers.rb +183 -0
  75. data/lib/stomper/support/1.9/frame_serializer.rb +64 -0
  76. data/lib/stomper/support/1.9/headers.rb +172 -0
  77. data/lib/stomper/support/ruby.rb +13 -0
  78. data/lib/stomper/uris.rb +49 -0
  79. data/lib/stomper/version.rb +7 -0
  80. data/spec/spec_helper.rb +13 -9
  81. data/spec/stomper/connection_spec.rb +712 -0
  82. data/spec/stomper/extensions/common_spec.rb +187 -0
  83. data/spec/stomper/extensions/events_spec.rb +78 -0
  84. data/spec/stomper/extensions/heartbeat_spec.rb +103 -0
  85. data/spec/stomper/extensions/scoping_spec.rb +21 -0
  86. data/spec/stomper/frame_serializer_1.8_spec.rb +318 -0
  87. data/spec/stomper/frame_serializer_spec.rb +316 -0
  88. data/spec/stomper/frame_spec.rb +36 -0
  89. data/spec/stomper/headers_spec.rb +224 -0
  90. data/spec/stomper/receipt_manager_spec.rb +91 -0
  91. data/spec/stomper/receivers/threaded_spec.rb +116 -0
  92. data/spec/stomper/scopes/header_scope_spec.rb +42 -0
  93. data/spec/stomper/scopes/receipt_scope_spec.rb +51 -0
  94. data/spec/stomper/scopes/transaction_scope_spec.rb +183 -0
  95. data/spec/stomper/sockets_spec.rb +113 -0
  96. data/spec/stomper/subscription_manager_spec.rb +107 -0
  97. data/spec/stomper/support_spec.rb +69 -0
  98. data/spec/stomper/uris_spec.rb +54 -0
  99. data/spec/stomper_spec.rb +9 -0
  100. data/spec/support/custom_argument_matchers.rb +57 -0
  101. data/spec/support/existential_frame_matchers.rb +19 -0
  102. data/spec/support/frame_header_matchers.rb +10 -0
  103. data/stomper.gemspec +30 -0
  104. metadata +272 -97
  105. data/AUTHORS +0 -21
  106. data/CHANGELOG +0 -20
  107. data/README.rdoc +0 -120
  108. data/lib/stomper/client.rb +0 -34
  109. data/lib/stomper/frame_reader.rb +0 -73
  110. data/lib/stomper/frame_writer.rb +0 -21
  111. data/lib/stomper/frames.rb +0 -39
  112. data/lib/stomper/frames/abort.rb +0 -10
  113. data/lib/stomper/frames/ack.rb +0 -25
  114. data/lib/stomper/frames/begin.rb +0 -11
  115. data/lib/stomper/frames/client_frame.rb +0 -89
  116. data/lib/stomper/frames/commit.rb +0 -10
  117. data/lib/stomper/frames/connect.rb +0 -10
  118. data/lib/stomper/frames/connected.rb +0 -30
  119. data/lib/stomper/frames/disconnect.rb +0 -10
  120. data/lib/stomper/frames/error.rb +0 -21
  121. data/lib/stomper/frames/message.rb +0 -48
  122. data/lib/stomper/frames/receipt.rb +0 -19
  123. data/lib/stomper/frames/send.rb +0 -10
  124. data/lib/stomper/frames/server_frame.rb +0 -38
  125. data/lib/stomper/frames/subscribe.rb +0 -42
  126. data/lib/stomper/frames/unsubscribe.rb +0 -19
  127. data/lib/stomper/open_uri_interface.rb +0 -41
  128. data/lib/stomper/receipt_handlers.rb +0 -23
  129. data/lib/stomper/receiptor.rb +0 -38
  130. data/lib/stomper/subscriber.rb +0 -76
  131. data/lib/stomper/subscription.rb +0 -128
  132. data/lib/stomper/subscriptions.rb +0 -95
  133. data/lib/stomper/threaded_receiver.rb +0 -59
  134. data/lib/stomper/transaction.rb +0 -185
  135. data/lib/stomper/transactor.rb +0 -50
  136. data/lib/stomper/uri.rb +0 -55
  137. data/spec/client_spec.rb +0 -29
  138. data/spec/connection_spec.rb +0 -22
  139. data/spec/frame_reader_spec.rb +0 -37
  140. data/spec/frame_writer_spec.rb +0 -27
  141. data/spec/frames/client_frame_spec.rb +0 -66
  142. data/spec/frames/indirect_frame_spec.rb +0 -45
  143. data/spec/frames/server_frame_spec.rb +0 -85
  144. data/spec/open_uri_interface_spec.rb +0 -132
  145. data/spec/receiptor_spec.rb +0 -35
  146. data/spec/shared_connection_examples.rb +0 -79
  147. data/spec/subscriber_spec.rb +0 -77
  148. data/spec/subscription_spec.rb +0 -157
  149. data/spec/subscriptions_spec.rb +0 -145
  150. data/spec/threaded_receiver_spec.rb +0 -33
  151. data/spec/transaction_spec.rb +0 -139
  152. data/spec/transactor_spec.rb +0 -46
@@ -0,0 +1,36 @@
1
+ When /^the client subscribes to "([^"]*)" with headers$/ do |dest, table|
2
+ @subscribe_frames ||= []
3
+ headers = table_to_headers table
4
+ @default_subscription_triggered = 0
5
+ @subscribe_frames << @connection.subscribe(dest, headers) do |m|
6
+ @default_subscription_triggered += 1
7
+ end
8
+ end
9
+
10
+ Then /^the default subscription callback should have been triggered( (\d+) times?)?$/ do |full, times|
11
+ if times.nil? || times.empty?
12
+ @default_subscription_triggered.should >= 1
13
+ else
14
+ @default_subscription_triggered.should == times.to_i
15
+ end
16
+ end
17
+
18
+ Then /^the default subscription callback should not have been triggered$/ do
19
+ @default_subscription_triggered.should == 0
20
+ end
21
+
22
+ When /^the client unsubscribes by ID$/ do
23
+ @connection.unsubscribe(@subscribe_frames.last[:id])
24
+ end
25
+
26
+ When /^the client unsubscribes by destination$/ do
27
+ @connection.unsubscribe(@subscribe_frames.last[:destination])
28
+ end
29
+
30
+ When /^the client unsubscribes by frame$/ do
31
+ @connection.unsubscribe(@subscribe_frames.last)
32
+ end
33
+
34
+ When /^the client unsubscribes from destination "([^"]*)"$/ do |destination|
35
+ @connection.unsubscribe(destination)
36
+ end
@@ -0,0 +1,8 @@
1
+ When /^the broker closes the connection unexpectedly$/ do
2
+ @broker.force_stop
3
+ end
4
+
5
+ Then /^after (\d+\.\d+) seconds, the receiver should no longer be running$/ do |sleep_for|
6
+ sleep sleep_for.to_f
7
+ @connection.running?.should be_false
8
+ end
File without changes
@@ -0,0 +1,151 @@
1
+ Feature: Subscribing
2
+ In order retrieve MESSAGEs from a broker
3
+ As a client
4
+ I want to be able to subscribe to destinations
5
+
6
+
7
+ Scenario: Delivering MESSAGE frames with subscription ID
8
+ Given a 1.1 connection between client and broker
9
+ When the client subscribes to "/queue/testing" with headers
10
+ | header-name | header-value |
11
+ | id | s-5678 |
12
+ And the broker sends a "MESSAGE" frame with headers
13
+ | header-name | header-value |
14
+ | message-id | m-1234 |
15
+ | subscription | s-5678 |
16
+ | destination | /queue/testing |
17
+ And the broker sends a "MESSAGE" frame with headers
18
+ | header-name | header-value |
19
+ | message-id | m-1235 |
20
+ | subscription | s-5678 |
21
+ | destination | /queue/testing |
22
+ And the frame exchange is completed
23
+ Then the client should have received a "MESSAGE" frame with headers
24
+ | header-name | header-value |
25
+ | message-id | m-1234 |
26
+ | subscription | s-5678 |
27
+ | destination | /queue/testing |
28
+ And the client should have received a "MESSAGE" frame with headers
29
+ | header-name | header-value |
30
+ | message-id | m-1235 |
31
+ | subscription | s-5678 |
32
+ | destination | /queue/testing |
33
+ And the default subscription callback should have been triggered 2 times
34
+
35
+
36
+ Scenario: Delivering MESSAGE frames without subscription ID
37
+ Given a 1.1 connection between client and broker
38
+ When the client subscribes to "/queue/testing" with headers
39
+ | header-name | header-value |
40
+ | id | s-5678 |
41
+ And the broker sends a "MESSAGE" frame with headers
42
+ | header-name | header-value |
43
+ | message-id | m-1234 |
44
+ | destination | /queue/testing |
45
+ And the broker sends a "MESSAGE" frame with headers
46
+ | header-name | header-value |
47
+ | message-id | m-1235 |
48
+ | destination | /queue/testing |
49
+ And the broker sends a "MESSAGE" frame with headers
50
+ | header-name | header-value |
51
+ | message-id | m-1236 |
52
+ | destination | /queue/testing |
53
+ And the frame exchange is completed
54
+ Then the client should have received a "MESSAGE" frame with headers
55
+ | header-name | header-value |
56
+ | message-id | m-1234 |
57
+ And the client should have received a "MESSAGE" frame with headers
58
+ | header-name | header-value |
59
+ | message-id | m-1235 |
60
+ And the client should have received a "MESSAGE" frame with headers
61
+ | header-name | header-value |
62
+ | message-id | m-1236 |
63
+ And the default subscription callback should have been triggered 3 times
64
+
65
+
66
+ Scenario: No callbacks for MESSAGE frames for which we have not subscribed
67
+ Given a 1.1 connection between client and broker
68
+ When the client subscribes to "/queue/testing" with headers
69
+ | header-name | header-value |
70
+ | id | s-5678 |
71
+ And the broker sends a "MESSAGE" frame with headers
72
+ | header-name | header-value |
73
+ | message-id | m-1234 |
74
+ | destination | /queue/testing |
75
+ | subscription | s-9999 |
76
+ And the frame exchange is completed
77
+ Then the client should have received a "MESSAGE" frame with headers
78
+ | header-name | header-value |
79
+ | subscription | s-9999 |
80
+ | message-id | m-1234 |
81
+ And the default subscription callback should not have been triggered
82
+
83
+
84
+ Scenario: No callbacks after unsubscribing by ID
85
+ Given a 1.1 connection between client and broker
86
+ When the client subscribes to "/queue/testing" with headers
87
+ | header-name | header-value |
88
+ | id | s-5678 |
89
+ And the broker sends a "MESSAGE" frame with headers
90
+ | header-name | header-value |
91
+ | message-id | m-1234 |
92
+ | destination | /queue/testing |
93
+ | subscription | s-5678 |
94
+ And the client unsubscribes by ID
95
+ And the broker sends a "MESSAGE" frame with headers
96
+ | header-name | header-value |
97
+ | message-id | m-1235 |
98
+ | destination | /queue/testing |
99
+ | subscription | s-5678 |
100
+ And the client disconnects
101
+ Then the default subscription callback should have been triggered 1 time
102
+
103
+ Scenario: No callbacks after unsubscribing by frame
104
+ Given a 1.1 connection between client and broker
105
+ When the client subscribes to "/queue/testing" with headers
106
+ | header-name | header-value |
107
+ | id | s-5678 |
108
+ And the broker sends a "MESSAGE" frame with headers
109
+ | header-name | header-value |
110
+ | message-id | m-1234 |
111
+ | destination | /queue/testing |
112
+ | subscription | s-5678 |
113
+ And the client unsubscribes by frame
114
+ And the broker sends a "MESSAGE" frame with headers
115
+ | header-name | header-value |
116
+ | message-id | m-1235 |
117
+ | destination | /queue/testing |
118
+ | subscription | s-5678 |
119
+ And the frame exchange is completed
120
+ Then the default subscription callback should have been triggered 1 time
121
+
122
+ Scenario: Unsubscribing from many by destination
123
+ Given a 1.1 connection between client and broker
124
+ When the client subscribes to "/queue/testing" with headers
125
+ | header-name | header-value |
126
+ | id | s-5678 |
127
+ And the client subscribes to "/queue/testing" with headers
128
+ | header-name | header-value |
129
+ | id | s-5679 |
130
+ And the broker sends a "MESSAGE" frame with headers
131
+ | header-name | header-value |
132
+ | message-id | m-1234 |
133
+ | destination | /queue/testing |
134
+ | subscription | s-5678 |
135
+ And the broker sends a "MESSAGE" frame with headers
136
+ | header-name | header-value |
137
+ | message-id | m-1235 |
138
+ | destination | /queue/testing |
139
+ And the client unsubscribes from destination "/queue/testing"
140
+ And the broker sends a "MESSAGE" frame with headers
141
+ | header-name | header-value |
142
+ | message-id | m-1235 |
143
+ | destination | /queue/testing |
144
+ And the frame exchange is completed
145
+ Then the default subscription callback should have been triggered 3 times
146
+ And the broker should have received an "UNSUBSCRIBE" frame with headers
147
+ | header-name | header-value |
148
+ | id | s-5678 |
149
+ And the broker should have received an "UNSUBSCRIBE" frame with headers
150
+ | header-name | header-value |
151
+ | id | s-5679 |
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__),"..","..","lib"))
2
+
3
+ begin
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_filter "/features/"
7
+ end
8
+ rescue LoadError
9
+ end
10
+
11
+ require 'stomper'
@@ -0,0 +1,12 @@
1
+ module HeaderHelpers
2
+
3
+ def table_to_headers(table)
4
+ table.hashes.inject({}) do |hdr, pairs|
5
+ hdr[pairs['header-name']] = pairs['header-value']
6
+ hdr
7
+ end
8
+ end
9
+
10
+ end
11
+
12
+ World(HeaderHelpers)
@@ -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-----