test_sdk1 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +1 -0
  3. data/LICENSE +201 -0
  4. data/README.md +147 -0
  5. data/SECURITY.md +12 -0
  6. data/lib/crypto/00_asymmetric_key.rb +95 -0
  7. data/lib/crypto/01_ed25519.rb +67 -0
  8. data/lib/crypto/asymmetric_key.rb +87 -0
  9. data/lib/crypto/ed25519_key.rb +44 -0
  10. data/lib/crypto/key_pair.rb +40 -0
  11. data/lib/crypto/keys.rb +7 -0
  12. data/lib/crypto/secp256k1_key.rb +0 -0
  13. data/lib/crypto/test_ed25519_key.rb +44 -0
  14. data/lib/entity/account.rb +45 -0
  15. data/lib/entity/action_thresholds.rb +25 -0
  16. data/lib/entity/associated_key.rb +24 -0
  17. data/lib/entity/auction_state.rb +36 -0
  18. data/lib/entity/bid.rb +24 -0
  19. data/lib/entity/bid_info.rb +51 -0
  20. data/lib/entity/contract.rb +47 -0
  21. data/lib/entity/contract_package.rb +41 -0
  22. data/lib/entity/contract_version.rb +33 -0
  23. data/lib/entity/delegator.rb +37 -0
  24. data/lib/entity/deploy.rb +44 -0
  25. data/lib/entity/deploy_approval.rb +24 -0
  26. data/lib/entity/deploy_executable.rb +162 -0
  27. data/lib/entity/deploy_executable_item_internal.rb +26 -0
  28. data/lib/entity/deploy_executable_transfer.rb +50 -0
  29. data/lib/entity/deploy_hash.rb +16 -0
  30. data/lib/entity/deploy_header.rb +60 -0
  31. data/lib/entity/deploy_info.rb +44 -0
  32. data/lib/entity/deploy_named_argument.rb +19 -0
  33. data/lib/entity/deploy_transfer.rb +10 -0
  34. data/lib/entity/disabled_version.rb +26 -0
  35. data/lib/entity/era_info.rb +18 -0
  36. data/lib/entity/era_summary.rb +44 -0
  37. data/lib/entity/era_validator.rb +23 -0
  38. data/lib/entity/executable_deploy_item.rb +11 -0
  39. data/lib/entity/group.rb +25 -0
  40. data/lib/entity/module_bytes.rb +50 -0
  41. data/lib/entity/peer.rb +25 -0
  42. data/lib/entity/seigniorage_allocation.rb +18 -0
  43. data/lib/entity/stored_contract_by_hash.rb +50 -0
  44. data/lib/entity/stored_contract_by_name.rb +50 -0
  45. data/lib/entity/stored_value.rb +57 -0
  46. data/lib/entity/stored_versioned_contract_by_hash.rb +61 -0
  47. data/lib/entity/stored_versioned_contract_by_name.rb +61 -0
  48. data/lib/entity/transfer.rb +65 -0
  49. data/lib/entity/validator_weight.rb +23 -0
  50. data/lib/entity/vesting_schedule.rb +22 -0
  51. data/lib/include.rb +18 -0
  52. data/lib/rpc/rpc.rb +227 -0
  53. data/lib/rpc/rpc_client.rb +233 -0
  54. data/lib/rpc/rpc_error.rb +79 -0
  55. data/lib/serialization/cl_type_serializer.rb +76 -0
  56. data/lib/serialization/cl_value_bytes_parsers.rb +498 -0
  57. data/lib/serialization/cl_value_serializer.rb +259 -0
  58. data/lib/serialization/deploy_approval_serializer.rb +15 -0
  59. data/lib/serialization/deploy_executable_serializer.rb +27 -0
  60. data/lib/serialization/deploy_header_serializer.rb +49 -0
  61. data/lib/serialization/deploy_named_arg_serializer.rb +19 -0
  62. data/lib/serialization/deploy_serializer.rb +268 -0
  63. data/lib/serialization/test.rb +431 -0
  64. data/lib/test_sdk1.rb +289 -0
  65. data/lib/types/cl_account_hash.rb +24 -0
  66. data/lib/types/cl_account_hash_type.rb +22 -0
  67. data/lib/types/cl_any.rb +25 -0
  68. data/lib/types/cl_any_type.rb +22 -0
  69. data/lib/types/cl_bool.rb +32 -0
  70. data/lib/types/cl_bool_type.rb +35 -0
  71. data/lib/types/cl_byte_array.rb +25 -0
  72. data/lib/types/cl_byte_array_type.rb +27 -0
  73. data/lib/types/cl_i32.rb +26 -0
  74. data/lib/types/cl_i32_type.rb +26 -0
  75. data/lib/types/cl_i64.rb +26 -0
  76. data/lib/types/cl_i64_type.rb +27 -0
  77. data/lib/types/cl_key.rb +39 -0
  78. data/lib/types/cl_key_type.rb +27 -0
  79. data/lib/types/cl_list.rb +25 -0
  80. data/lib/types/cl_list_type.rb +26 -0
  81. data/lib/types/cl_map.rb +25 -0
  82. data/lib/types/cl_map_type.rb +26 -0
  83. data/lib/types/cl_option.rb +33 -0
  84. data/lib/types/cl_option_type.rb +52 -0
  85. data/lib/types/cl_public_key.rb +152 -0
  86. data/lib/types/cl_public_key_type.rb +26 -0
  87. data/lib/types/cl_result.rb +25 -0
  88. data/lib/types/cl_result_type.rb +26 -0
  89. data/lib/types/cl_string.rb +39 -0
  90. data/lib/types/cl_string_type.rb +32 -0
  91. data/lib/types/cl_tuple.rb +151 -0
  92. data/lib/types/cl_tuple_type.rb +108 -0
  93. data/lib/types/cl_type.rb +94 -0
  94. data/lib/types/cl_type_tag.rb +51 -0
  95. data/lib/types/cl_u128.rb +26 -0
  96. data/lib/types/cl_u128_type.rb +26 -0
  97. data/lib/types/cl_u256.rb +26 -0
  98. data/lib/types/cl_u256_type.rb +26 -0
  99. data/lib/types/cl_u32.rb +26 -0
  100. data/lib/types/cl_u32_type.rb +26 -0
  101. data/lib/types/cl_u512.rb +26 -0
  102. data/lib/types/cl_u512_type.rb +26 -0
  103. data/lib/types/cl_u64.rb +26 -0
  104. data/lib/types/cl_u64_type.rb +27 -0
  105. data/lib/types/cl_u8.rb +26 -0
  106. data/lib/types/cl_u8_type.rb +26 -0
  107. data/lib/types/cl_unit.rb +38 -0
  108. data/lib/types/cl_unit_type.rb +22 -0
  109. data/lib/types/cl_uref.rb +120 -0
  110. data/lib/types/cl_uref_type.rb +46 -0
  111. data/lib/types/cl_value.rb +10 -0
  112. data/lib/types/constants.rb +50 -0
  113. data/lib/types/error.rb +7 -0
  114. data/lib/utils/base_16.rb +18 -0
  115. data/lib/utils/byte_utils.rb +107 -0
  116. data/lib/utils/find_byte_parser_by_cl_type.rb +53 -0
  117. data/lib/utils/hash_utils.rb +19 -0
  118. data/lib/utils/hex_utils.rb +12 -0
  119. data/lib/utils/time_utils.rb +85 -0
  120. data/lib/utils/utils.rb +2 -0
  121. data/lib/version.rb +3 -0
  122. data/spec/a_spec.rb +697 -0
  123. data/spec/byte_utils_spec.rb +72 -0
  124. data/spec/cl_public_spec.rb +169 -0
  125. data/spec/cl_types_spec.rb +715 -0
  126. data/spec/cl_value_serializer_spec.rb +140 -0
  127. data/spec/client_spec.rb +25 -0
  128. data/spec/crypto_spec.rb +42 -0
  129. data/spec/deploy_approval_serializer_spec.rb +26 -0
  130. data/spec/deploy_executable_serializer_spec.rb +0 -0
  131. data/spec/deploy_header_serializer_spec.rb +21 -0
  132. data/spec/deploy_named_arg_serializer_spec.rb +49 -0
  133. data/spec/deploy_serializer_spec.rb +77 -0
  134. data/spec/deploy_serializer_test_spec.rb +225 -0
  135. data/spec/mainnet_spec.rb +452 -0
  136. data/spec/spec_helper.rb +100 -0
  137. data/spec/string_spec.rb +68 -0
  138. data/spec/testnet_spec.rb +498 -0
  139. data/spec/time_utils_spec.rb +87 -0
  140. metadata +198 -0
@@ -0,0 +1,452 @@
1
+ # mainnet_spec.rb
2
+ require './lib/rpc/rpc_client.rb'
3
+
4
+ # Ip Address taken from Mainnet
5
+ # client = Casper::RpcClient.new("5.161.68.4")
6
+ client = Casper::RpcClient.new("65.108.78.120")
7
+ # block_Hash taken from MainNet
8
+ block_hash = "5fdbdf3fa70d37821aa2d1752743e9653befc15e65e40c2655e1ce93a807260f"
9
+ # deploy_Hash taken from MainNet
10
+ deploy_hash = "52a40996a88523c475c12e5370ff90b0ae4ec051cfaa57cd048c136b1a83319d"
11
+ state_root_hash = "7b605ad991c949832fd966495afc3f97a2b8122a1a6afc2610b545a8c07e3456"
12
+ item_key = "f870e3cadfde21d7d7686fdf3d1a8413838274d363ca7b27ae71fc9125eb6743"
13
+ uref = "uref-0d689e987db7ee5be246282c3a7badf0411e34baeeab8e9d73c1223ae4ad02e5-007"
14
+ describe Casper::RpcClient do
15
+ url = "65.21.0.X"
16
+ client2 = Casper::RpcClient.new(url)
17
+ it "fails, wrong ip format : #{url}" do
18
+ expect(client2.get_error).to eql("SocketError")
19
+ end
20
+ url = "65.21.0.0"
21
+ client3 = Casper::RpcClient.new(url)
22
+ it "fails, #{url} is not available in network" do
23
+ expect(client3.get_error).to eql("Errno::ECONNREFUSED")
24
+ end
25
+ # Test info_get_peers()
26
+ describe "#info_get_peers" do
27
+ peers = client.info_get_peers
28
+ context "Peers Array" do
29
+ it "passes, peers array is not nil" do
30
+ expect(peers).to be_truthy
31
+ end
32
+
33
+ it "passes, peers array is not empty" do
34
+ expect(peers).not_to be_empty
35
+ end
36
+
37
+ # it "passes, size of both peer arrays are equal" do
38
+ # # Check the length of the peers array
39
+ # client2 = Casper::RpcClient.new("34.192.231.34")
40
+ # other_peers = client2.info_get_peers
41
+ # expect(peers.size).to eql(other_peers.size)
42
+ # end
43
+
44
+ it "passes, peers object is a type of Array" do
45
+ # Check whether ıt is an array or not
46
+ expect(client.info_get_peers).to be_an(Array)
47
+ # Check the length of the peers array
48
+ expect(client.info_get_peers.length).to be > 0
49
+ end
50
+
51
+ it "passes, peers member are types of Hash" do
52
+ # Check type of peers elements
53
+ expect(peers[0]).to be_an_instance_of(Hash)
54
+ end
55
+
56
+ peer = peers[0]
57
+ first_item = peer["node_id"]
58
+ second_item = peer["address"]
59
+ it "passes, peer members are types of String" do
60
+ expect(first_item).to be_an_instance_of(String)
61
+ expect(second_item).to be_an_instance_of(String)
62
+ expect(first_item.length).to eq(14)
63
+ end
64
+
65
+ it "passes, length of first_item equal #{first_item.length}" do
66
+ expect(first_item.length).to eq(14)
67
+ end
68
+
69
+ peer.deep_symbolize_keys!
70
+ it "passes, peer includes node_id key" do
71
+ expect(peer).to have_key(:node_id)
72
+ end
73
+
74
+ it "passes, peer includes address key" do
75
+ expect(peer).to have_key(:address)
76
+ end
77
+ end
78
+ context "When called info_get_peers with invalid ip address" do
79
+ client4 = Casper::RpcClient.new("65.21.227.X")
80
+ # puts client4.info_get_peers
81
+ it "fails, \"#{client4.info_get_peers}\"" do
82
+ expect(client4.info_get_peers).to eql("SocketError")
83
+ end
84
+ end
85
+ end
86
+
87
+ # Test chain_get_StateRootHash
88
+ describe "#chain_get_StateRootHash" do
89
+ context "Without a block_hash parameter" do
90
+ current_state_root_hash = client.chain_get_StateRootHash("")
91
+ it "passes, current state_root_hash is a type of String" do
92
+ expect(current_state_root_hash).to be_an(String)
93
+ end
94
+
95
+ it "passes, current state_root_hash is not nil" do
96
+ expect(current_state_root_hash).to be_truthy
97
+ end
98
+
99
+ it "passes, current state_root_hash is not empty" do
100
+ expect(current_state_root_hash).not_to be_empty
101
+ end
102
+
103
+ it "passes, current state_root_hash is 64 characters long" do
104
+ expect(current_state_root_hash.length).to eq(64)
105
+ end
106
+ end
107
+
108
+ context "With a block_hash parameter" do
109
+ current_state_root_hash = client.chain_get_StateRootHash(state_root_hash)
110
+ it "passes, current state_root_hash is a type of String" do
111
+ expect(current_state_root_hash).to be_an(String)
112
+ end
113
+
114
+ it "passes, current state_root_hash is not nil" do
115
+ expect(current_state_root_hash).to be_truthy
116
+ end
117
+
118
+ it "passes, current state_root_hash is not empty" do
119
+ expect(current_state_root_hash).not_to be_empty
120
+ end
121
+
122
+ it "passes, current state_root_hash is 64 characters long" do
123
+ expect(current_state_root_hash.length).to eq(64)
124
+ end
125
+ end
126
+ end
127
+
128
+ # Test info_get_deploy(deploy_hash)
129
+ describe "#info_get_deploy" do
130
+ context "When info_get_deploy method is called with deploy hash parameter" do
131
+ deploy = client.info_get_deploy(deploy_hash)
132
+ deploy.deep_symbolize_keys!
133
+ payment = deploy[:payment]
134
+ session = deploy[:session]
135
+ approvals = deploy[:approvals]
136
+ it "passes, Deploy type is a Hash" do
137
+ expect(deploy).to be_a(Hash)
138
+ end
139
+
140
+ it "passes, hash value of Deploy is equal to the deploy_hash value" do
141
+ hash_value = deploy[:hash]
142
+ expect(hash_value).to eql(deploy_hash)
143
+ end
144
+
145
+ it "passes, header is not nil" do
146
+ header = deploy[:header]
147
+ expect(header).to be_truthy
148
+ end
149
+
150
+ it "passes, payment is not nil" do
151
+ expect(payment).to be_truthy
152
+ end
153
+
154
+ it "passes, payment includes ModuleBytes key" do
155
+ # module_bytes = payment[:ModuleBytes]
156
+ # key_variable = :ModuleBytes
157
+ expect(payment).to have_key(:ModuleBytes)
158
+ end
159
+
160
+ it "passes, session is not nil" do
161
+ expect(session).to be_truthy
162
+ expect(session).to be_an_instance_of(Hash)
163
+ end
164
+
165
+ it "passes, session includes StoredContractByHash key" do
166
+ expect(session).to have_key(:StoredContractByHash)
167
+ end
168
+
169
+ it "passes, approvals is not nil" do
170
+ expect(approvals).to be_truthy
171
+ expect(approvals).to be_an_instance_of(Array)
172
+ end
173
+
174
+ it "passes, approvals includes signer" do
175
+ expect(approvals[0]).to have_key(:signer)
176
+ end
177
+
178
+ it "passes, approvals includes signature" do
179
+ expect(approvals[0]).to have_key(:signature)
180
+ end
181
+ end
182
+
183
+ context "When info_get_deploy is called with an empty deploy hash parameter" do
184
+ it "fails, ServerError: Invalid params " do
185
+ err = client.info_get_deploy("")
186
+ # err = "Server error -32602: Invalid params (Jimson::Client::Error::ServerError)"
187
+ expect {raise StandardError, err}.
188
+ to raise_error(err)
189
+ end
190
+ end
191
+
192
+ context "When info_get_deploy is called with an invalid parameter" do
193
+ it "fails, ServerError: Invalid params " do
194
+ err = client.info_get_deploy("AAAAAAA146419d036d13b83f37e7580df1ddfd925fbe4b36ee90f9d6fd63b9bb")
195
+ expect {raise StandardError, err}.
196
+ to raise_error(err)
197
+ end
198
+ it "fails, ServerError: Invalid params " do
199
+ err = client.info_get_deploy("asdsadsadsa")
200
+ expect {raise StandardError, err}.
201
+ to raise_error(err)
202
+ end
203
+ end
204
+ end
205
+
206
+ # Test info_get_status()
207
+ describe "#info_get_status" do
208
+ node_status = client.info_get_status
209
+ node_status.deep_symbolize_keys!
210
+ context "Returns the current status of the node" do
211
+ it "passes, node includes api_version, chainspec_name, starting_state_root_hash, peers, last_added_block_info, our_public_signing_key, round_length, next_upgrade, build_version, uptime keys" do
212
+ expect(node_status).to have_key(:api_version)
213
+ expect(node_status).to have_key(:chainspec_name)
214
+ expect(node_status).to have_key(:starting_state_root_hash)
215
+ expect(node_status).to have_key(:peers)
216
+ expect(node_status).to have_key(:last_added_block_info)
217
+ expect(node_status).to have_key(:our_public_signing_key)
218
+ expect(node_status).to have_key(:round_length)
219
+ expect(node_status).to have_key(:next_upgrade)
220
+ expect(node_status).to have_key(:build_version)
221
+ expect(node_status).to have_key(:uptime)
222
+ end
223
+
224
+ it "passes, network is casper" do
225
+ chainspec_name = node_status[:chainspec_name]
226
+ expect(chainspec_name).to eql("casper")
227
+ end
228
+
229
+ it "passes, last added block includes hash, timestamp, era_id, height, state_root_hash, creator keys" do
230
+ last_block = node_status[:last_added_block_info]
231
+ expect(last_block).to have_key(:hash)
232
+ expect(last_block).to have_key(:timestamp)
233
+ expect(last_block).to have_key(:era_id)
234
+ expect(last_block).to have_key(:state_root_hash)
235
+ expect(last_block).to have_key(:creator)
236
+ end
237
+
238
+ it "passes, the number of peers are equal" do
239
+ peers_from_info_get_peers = client.info_get_peers
240
+ peers_from_info_get_status = node_status[:peers]
241
+ expect(peers_from_info_get_status.size).to be > 0
242
+ expect(peers_from_info_get_peers.size).to be > 0
243
+ end
244
+
245
+ it "passes, node public key is : 014382d46e2543ab2832c04936f8c205847040426abb56065bbf7b2f7e1d33f200" do
246
+ our_public_signing_key = "014382d46e2543ab2832c04936f8c205847040426abb56065bbf7b2f7e1d33f200"
247
+ expect(node_status[:our_public_signing_key]).to eql(our_public_signing_key)
248
+ end
249
+ end
250
+ end
251
+
252
+ # Test chain_get_block_transfers(block_hash)
253
+ describe "#chain_get_block_transfers" do
254
+ transfers = client.chain_get_block_transfers(block_hash)
255
+ context "Returns all transfers for a Block from the network" do
256
+ it "passes, transfers is not empty and the number of transfers is #{transfers.size}" do
257
+ expect(transfers).not_to be_empty
258
+ expect(transfers.size).to eql(2)
259
+ end
260
+
261
+ it "passes, amount of the first transaction is 6000000000000 motes" do
262
+ first_transaction = transfers[0].deep_symbolize_keys!
263
+ first_transfer_amount = 6000000000000
264
+ expect(first_transaction[:amount].to_i).to eql(first_transfer_amount)
265
+ end
266
+
267
+ it "passes, amount of the second transaction is 3997300000000 motes" do
268
+ second_transaction = transfers[1].deep_symbolize_keys!
269
+ second_transfer_amount = 3997300000000
270
+ expect(second_transaction[:amount].to_i).to eql(second_transfer_amount)
271
+ end
272
+
273
+ it "passes, all keys in transfers are \'deploy_hash\', \'from\', \'to\',
274
+ \'source\', \'target\', \'amount\', \'gas\', \'id\' respectively" do
275
+ transfers = transfers[0]
276
+ transfers.deep_symbolize_keys!
277
+ expect(transfers).to have_key(:deploy_hash)
278
+ expect(transfers).to have_key(:from)
279
+ expect(transfers).to have_key(:to)
280
+ expect(transfers).to have_key(:source)
281
+ expect(transfers).to have_key(:target)
282
+ expect(transfers).to have_key(:amount)
283
+ expect(transfers).to have_key(:gas)
284
+ expect(transfers).to have_key(:id)
285
+ end
286
+ end
287
+ end
288
+
289
+ # Test chain_get_block(block_hash)
290
+ describe "#chain_get_block" do
291
+ block_hash = "5fdbdf3fa70d37821aa2d1752743e9653befc15e65e40c2655e1ce93a807260f"
292
+ block = client.chain_get_block(block_hash)
293
+ block.deep_symbolize_keys!
294
+ header = block[:header]
295
+ body = block[:body]
296
+ describe "Returns a Block from the network" do
297
+ context "When chain_get_block method is called with deploy hash parameter" do
298
+ it "passes, block hash : #{block[:hash]}" do
299
+ expect(block[:hash]).to be_truthy
300
+ expect(block[:hash]).to be_a(String)
301
+ expect(block[:hash]).not_to be_empty
302
+ expect(block[:hash].length).to eql(64)
303
+ end
304
+
305
+ it "passes, hash value of block is equal to the block hash given as parameter" do
306
+ expect(block[:hash]).to eq(block_hash)
307
+ end
308
+
309
+ it "passes, block includes \'hash\', \'header\', \'body\' and \'proofs\' respectively" do
310
+ expect(block).to have_key(:hash)
311
+ expect(block).to have_key(:header)
312
+ expect(block).to have_key(:body)
313
+ # expect(block).to have_key(:testtest) # Negative test, uncomment and test again to see the result.
314
+ end
315
+
316
+ it "passes, header includes \'parent_hash\', \'state_root_hash\', \'body_hash\', \'random_bit\',
317
+ \'accumulated_seed\', \'era_end\', \'timestamp\', \'era_id\', \'height\', \'protocol_version\' keys respectively" do
318
+ expect(header).to have_key(:parent_hash)
319
+ expect(header[:parent_hash]).not_to be_empty # parent_hash is not empty
320
+ expect(header).to have_key(:state_root_hash)
321
+ expect(header[:state_root_hash]).not_to be_empty # state_root_hash is not empty
322
+ expect(header).to have_key(:body_hash)
323
+ expect(header[:body_hash]).not_to be_empty # body_hash is not empty
324
+ expect(header).to have_key(:random_bit)
325
+ expect(header[:random_bit]).to be_truthy # random_bit is true
326
+ expect(header).to have_key(:accumulated_seed)
327
+ expect(header[:accumulated_seed]).not_to be_empty # accumulated_seed is not empty
328
+ expect(header).to have_key(:era_end)
329
+ expect(header[:era_end]).to be_falsey # era_end is not nil
330
+ expect(header).to have_key(:timestamp)
331
+ expect(header[:timestamp]).not_to be_empty # timestamp is not nil
332
+ expect(header).to have_key(:height)
333
+ expect(header[:height]).to be_truthy # height is not nil
334
+ expect(header).to have_key(:protocol_version)
335
+ expect(header[:protocol_version]).to be_truthy # protocol_version is not nil
336
+ # expect(header).to have_key(:testtest) # Negative test, uncomment and test again to see the result.
337
+ end
338
+
339
+ it "passes, body includes \'proposer\', \'deploy_hashes\' and \'transfer_hashes\' keys respectively" do
340
+ expect(body).to have_key(:proposer)
341
+ expect(body[:proposer]).not_to be_empty
342
+ expect(body).to have_key(:deploy_hashes)
343
+ expect(body[:deploy_hashes]).to be_a_kind_of(Array)
344
+ expect(body).to have_key(:transfer_hashes)
345
+ expect(body[:transfer_hashes]).to be_a_kind_of(Array)
346
+ # expect(body).to have_key(:testtest) # Negative test, uncomment and test again to see the result.
347
+ end
348
+
349
+ it "includes public_key and signature keys" do
350
+ proofs = block[:proofs]
351
+ proof_item = proofs[0]
352
+ expect(proof_item).to have_key(:public_key)
353
+ expect(proof_item[:public_key]).not_to be_empty
354
+ expect(proof_item).to have_key(:signature)
355
+ expect(proof_item[:signature]).not_to be_empty
356
+ # expect(proof_item).to have_key(:testtest) # Negative test, uncomment and test again to see the result.
357
+ end
358
+ end
359
+ context "When chain_get_block method is called without deploy hash parameter" do
360
+ # Add tests
361
+ end
362
+ end
363
+ end
364
+
365
+ # Test chain_get_eraInfo_by_SwitchBlock(block_hash)
366
+ describe "#chain_get_eraInfo_by_SwitchBlock" do
367
+ context "Returns an EraInfo from the network" do
368
+ switch_block_hash = "4696285db1ca6572f425cada612257f85a58a6a4034c09846afe360ba40e5df0"
369
+ era_summary = client.chain_get_eraInfo_by_SwitchBlock(switch_block_hash)
370
+
371
+ if era_summary.class == Hash
372
+ era_summary.deep_symbolize_keys!
373
+
374
+ era_id = 3663
375
+ it "checks whether era_ids are equal or not" do
376
+ expect(era_summary[:era_id]).to eql(era_id)
377
+ end
378
+
379
+ state_root_hash = "4f9929288b885bb4eae3c27aaf13c974e1fc79eb12be5c6064e316e5797ca4ec"
380
+ it "checks whether state_root_hashes are equal or not" do
381
+ expect(era_summary[:state_root_hash]).to eql(state_root_hash)
382
+ end
383
+ end
384
+ end
385
+ end
386
+
387
+ # Test state_get_item(state_root_hash, key, path)
388
+ describe "#state_get_item" do
389
+ context "Returns a stored value from the network" do
390
+ stored_value = client.state_get_item("647C28545316E913969B032Cf506d5D242e0F857061E70Fb3DF55980611ace86", "bid-24b6D5Aabb8F0AC17D272763A405E9CECa9166B75B745Cf200695E172857c2dD", [])
391
+ stored_value.deep_symbolize_keys!
392
+
393
+ validator_public_key = "012bac1d0ff9240ff0b7b06d555815640497861619ca12583ddef434885416e69b"
394
+ stored_value[:Bid][:validator_public_key]
395
+
396
+ it "checks validator_public_key equality" do
397
+ expect(stored_value[:Bid][:validator_public_key]).to eql(validator_public_key)
398
+ end
399
+
400
+ staked_amount = 208330980103513
401
+ it "checks staked_amount which is 208330980103513" do
402
+ expect(stored_value[:Bid][:staked_amount].to_i).to eql(208330980103513)
403
+ end
404
+
405
+ it "includes initial_release_timestamp_millis keys" do
406
+ expect(stored_value[:Bid][:vesting_schedule]).to have_key(:initial_release_timestamp_millis)
407
+ end
408
+ end
409
+ end
410
+
411
+ # Test state_get_dictionary_item(state_root_hash, item_key, uref)
412
+ describe "#state_get_dictionary_item" do
413
+ stored_value = client.state_get_dictionary_item("d5811c438982f231a9152011c0f6ce9ae9c716e8075a6edec8390f10072ecd29","f870e3cadfde21d7d7686fdf3d1a8413838274d363ca7b27ae71fc9125eb6743", "uref-0d689e987db7ee5be246282c3a7badf0411e34baeeab8e9d73c1223ae4ad02e5-007")
414
+ stored_value.deep_symbolize_keys!
415
+ it "checks that CLValue should not be nil" do
416
+ expect(stored_value[:CLValue]).to be_truthy
417
+ end
418
+
419
+ it "checks that cl_type should equal to String" do
420
+ expect(stored_value[:CLValue][:cl_type]).to eql("String")
421
+ end
422
+
423
+ it "checks that CLValue parsed equals to \"https://caspercommunity.io\"" do
424
+ expect(stored_value[:CLValue][:parsed]).to eql("https://caspercommunity.io")
425
+ end
426
+ end
427
+
428
+ # Test state_get_balance(state_root_hash, balance_uref)
429
+ describe "#state_get_balance" do
430
+ balance = client.state_get_balance("610e932aef10d3e1fa04940c79a4a2789ee79c17046f1a9b45a2919f3600f3d5", "uref-7de5e973b7d70bc2b328814411f2009aafd8dba901cfc2c588ba65088dcd22bb-007")
431
+
432
+ it "is equal to 29269647684075" do
433
+ expect(balance.to_i).to eql(29269647684075)
434
+ end
435
+ end
436
+
437
+ # Test state_get_AuctionInfo
438
+ describe "#state_get_AuctionInfo" do
439
+ auction_state = client.state_get_AuctionInfo
440
+ if auction_state.class == Hash
441
+ auction_state.deep_symbolize_keys!
442
+ it "checks state root hash equality and they should be equal" do
443
+ expect(auction_state[:state_root_hash]).to eql(client.chain_get_StateRootHash)
444
+ end
445
+
446
+ it "checks that era_validators is not empty" do
447
+ expect(auction_state[:era_validators]).not_to be_empty
448
+ end
449
+ end
450
+ end
451
+
452
+ end
@@ -0,0 +1,100 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
4
+ # this file to always be loaded, without a need to explicitly require it in any
5
+ # files.
6
+ #
7
+ # Given that it is always loaded, you are encouraged to keep this file as
8
+ # light-weight as possible. Requiring heavyweight dependencies from this file
9
+ # will add to the boot time of your test suite on EVERY test run, even for an
10
+ # individual file that may not need all of that loaded. Instead, consider making
11
+ # a separate helper file that requires the additional dependencies and performs
12
+ # the additional setup, and require it from the spec files that actually need
13
+ # it.
14
+ #
15
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16
+ RSpec.configure do |config|
17
+ # rspec-expectations config goes here. You can use an alternate
18
+ # assertion/expectation library such as wrong or the stdlib/minitest
19
+ # assertions if you prefer.
20
+ config.expect_with :rspec do |expectations|
21
+ # This option will default to `true` in RSpec 4. It makes the `description`
22
+ # and `failure_message` of custom matchers include text for helper methods
23
+ # defined using `chain`, e.g.:
24
+ # be_bigger_than(2).and_smaller_than(4).description
25
+ # # => "be bigger than 2 and smaller than 4"
26
+ # ...rather than:
27
+ # # => "be bigger than 2"
28
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
29
+ end
30
+
31
+ # rspec-mocks config goes here. You can use an alternate test double
32
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
33
+ config.mock_with :rspec do |mocks|
34
+ # Prevents you from mocking or stubbing a method that does not exist on
35
+ # a real object. This is generally recommended, and will default to
36
+ # `true` in RSpec 4.
37
+ mocks.verify_partial_doubles = true
38
+ end
39
+
40
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
41
+ # have no way to turn it off -- the option exists only for backwards
42
+ # compatibility in RSpec 3). It causes shared context metadata to be
43
+ # inherited by the metadata hash of host groups and examples, rather than
44
+ # triggering implicit auto-inclusion in groups with matching metadata.
45
+ config.shared_context_metadata_behavior = :apply_to_host_groups
46
+
47
+ # The settings below are suggested to provide a good initial experience
48
+ # with RSpec, but feel free to customize to your heart's content.
49
+ =begin
50
+ # This allows you to limit a spec run to individual examples or groups
51
+ # you care about by tagging them with `:focus` metadata. When nothing
52
+ # is tagged with `:focus`, all examples get run. RSpec also provides
53
+ # aliases for `it`, `describe`, and `context` that include `:focus`
54
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
55
+ config.filter_run_when_matching :focus
56
+
57
+ # Allows RSpec to persist some state between runs in order to support
58
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
59
+ # you configure your source control system to ignore this file.
60
+ config.example_status_persistence_file_path = "spec/examples.txt"
61
+
62
+ # Limits the available syntax to the non-monkey patched syntax that is
63
+ # recommended. For more details, see:
64
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
65
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
66
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
67
+ config.disable_monkey_patching!
68
+
69
+ # This setting enables warnings. It's recommended, but in some cases may
70
+ # be too noisy due to issues in dependencies.
71
+ config.warnings = true
72
+
73
+ # Many RSpec users commonly either run the entire suite or an individual
74
+ # file, and it's useful to allow more verbose output when running an
75
+ # individual spec file.
76
+ if config.files_to_run.one?
77
+ # Use the documentation formatter for detailed output,
78
+ # unless a formatter has already been configured
79
+ # (e.g. via a command-line flag).
80
+ config.default_formatter = "doc"
81
+ end
82
+
83
+ # Print the 10 slowest examples and example groups at the
84
+ # end of the spec run, to help surface which specs are running
85
+ # particularly slow.
86
+ config.profile_examples = 10
87
+
88
+ # Run specs in random order to surface order dependencies. If you find an
89
+ # order dependency and want to debug it, you can fix the order by providing
90
+ # the seed, which is printed after each run.
91
+ # --seed 1234
92
+ config.order = :random
93
+
94
+ # Seed global randomization in this process using the `--seed` CLI option.
95
+ # Setting this allows you to use `--seed` to deterministically reproduce
96
+ # test failures related to randomization by passing the same `--seed` value
97
+ # as the one that triggered the failure.
98
+ Kernel.srand config.seed
99
+ =end
100
+ end
@@ -0,0 +1,68 @@
1
+ require_relative '../lib/types/cl_string.rb'
2
+ require_relative '../lib/types/constants.rb'
3
+ require_relative '../lib/serialization/cl_value_bytes_parsers.rb'
4
+ require 'json'
5
+
6
+ =begin
7
+ Strings serialize as a 32-bit integer representing the length in bytes
8
+ (note: this might be different than the number of characters since special characters, such as emojis, take more than one byte),
9
+ followed by the UTF-8 encoding of the characters in the string.
10
+ E.g. "Hello, World!" serializes as 0x0d00000048656c6c6f2c20576f726c6421
11
+ =end
12
+ describe CLString do
13
+ cl_string = CLString.new("ABC")
14
+ describe "#get_value" do
15
+ it "should return proper value" do
16
+ expect(cl_string.get_value).to eq("ABC")
17
+ end
18
+ end
19
+
20
+ describe "#get_cl_type" do
21
+ it "should return proper cl_type" do
22
+ expect(cl_string.get_cl_type).to be_an_instance_of(String)
23
+ end
24
+ end
25
+
26
+ describe "#get_cl_type" do
27
+ it "should return String type" do
28
+ expect(cl_string.get_cl_type).to eq('String')
29
+ end
30
+ end
31
+
32
+ describe "#cl_string.get_size" do
33
+ it "should return proper string length" do
34
+ expect(cl_string.get_size).to eq(3)
35
+ end
36
+ end
37
+
38
+ it "should return \'ABC\'" do
39
+ expect(cl_string.from_bytes("03000000414243")).to eql("ABC")
40
+ end
41
+
42
+ it "should do to_bytes / from_bytes string serialization" do
43
+ string = CLString.new("Hello, World!")
44
+ value = string.get_value
45
+ bytes = string.to_bytes(value)
46
+ result_string = string.from_bytes(bytes)
47
+ puts value, bytes, result_string
48
+ expect(value).to eql("Hello, World!")
49
+ expect(bytes).to eql("0d00000048656c6c6f2c20576f726c6421")
50
+ expect(value).to eql(result_string)
51
+ end
52
+ it "to_bytes / from_bytes" do
53
+ str = "pclphXwfYmCmdITj8hnh"
54
+ len = str.length
55
+ hex1 = len.to_s(16).rjust(8, '0').scan(/../).reverse.join('')
56
+ hex2 = str.unpack("H*").first
57
+ hex3 = hex1 + hex2
58
+ expected_hex1 = "14000000"
59
+ expected_hex2 = "70636c7068587766596d436d6449546a38686e68"
60
+ expected_hex3 = "1400000070636c7068587766596d436d6449546a38686e68"
61
+ puts str
62
+ puts hex3
63
+ puts CLValueBytesParsers::CLStringBytesParser.to_bytes(str)
64
+ puts CLValueBytesParsers::CLStringBytesParser.from_bytes(hex3)
65
+ end
66
+ end
67
+
68
+