toq 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ class Translator < Toq::Proxy
4
+
5
+ translate :foo do |response|
6
+ response.map(&:to_s)
7
+ end
8
+
9
+ translate :delay do |response, arguments|
10
+ [arguments, response.map(&:to_s)]
11
+ end
12
+
13
+ end
14
+
15
+ describe Toq::Proxy do
16
+
17
+ def wait
18
+ Raktr.global.wait rescue Raktr::Error::NotRunning
19
+ end
20
+
21
+ before(:each) do
22
+ if Raktr.global.running?
23
+ Raktr.stop
24
+ end
25
+
26
+ Raktr.global.run_in_thread
27
+ end
28
+
29
+ let(:translated_arguments) do
30
+ arguments.map(&:to_s)
31
+ end
32
+ let(:arguments) do
33
+ [
34
+ 'one',
35
+ 2,
36
+ { three: 3 },
37
+ [ 4 ]
38
+ ]
39
+ end
40
+ let(:reactor) { Raktr.global }
41
+ let(:client) { start_client( rpc_opts ) }
42
+ let(:handler) { 'test' }
43
+ let(:translator) { Translator.new( client, handler ) }
44
+ subject do
45
+ Toq::Proxy.new( client, handler )
46
+ end
47
+
48
+ it 'forwards synchronous calls' do
49
+ subject.foo( arguments ).should == arguments
50
+ end
51
+
52
+ it 'forwards synchronous calls' do
53
+ response = nil
54
+ subject.foo( arguments ) do |res|
55
+ response = res
56
+ Raktr.stop
57
+ end
58
+ wait
59
+
60
+ response.should == arguments
61
+ end
62
+
63
+ describe '.translate' do
64
+ context 'when a synchronous call' do
65
+ context 'does not return an exception' do
66
+ it 'returns the translated result' do
67
+ translator.foo( arguments ).should == translated_arguments
68
+ end
69
+ end
70
+
71
+ context 'returns an exception' do
72
+ it 'returns the exception'
73
+ end
74
+ end
75
+
76
+ context 'when an asynchronous call' do
77
+ context 'does not result in an exception' do
78
+ it 'calls the block with the translated result' do
79
+ response = nil
80
+ translator.foo( arguments ) do |res|
81
+ response = res
82
+ Raktr.stop
83
+ end
84
+ wait
85
+
86
+ response.should == translated_arguments
87
+ end
88
+ end
89
+
90
+ context 'results in an exception' do
91
+ it 'calls the block with the exception'
92
+ end
93
+ end
94
+
95
+ it 'passes the method arguments to the translator' do
96
+ translator.delay( arguments ).should == [arguments, translated_arguments]
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Toq::Request do
4
+ subject { described_class.new }
5
+
6
+ describe '#message' do
7
+ it 'should be an accessor' do
8
+ subject.message = 'test'
9
+ subject.message.should == 'test'
10
+ end
11
+ end
12
+
13
+ describe '#args' do
14
+ it 'should be an accessor' do
15
+ subject.args = %w(test)
16
+ subject.args.should == %w(test)
17
+ end
18
+ end
19
+
20
+ describe '#token' do
21
+ it 'should be an accessor' do
22
+ subject.token = 'blah'
23
+ subject.token.should == 'blah'
24
+ end
25
+ end
26
+
27
+ describe '#callback' do
28
+ it 'should be an accessor' do
29
+ called = false
30
+ subject.callback = proc { called = true }
31
+ subject.callback.call
32
+ called.should be_true
33
+ end
34
+ end
35
+
36
+ describe '#prepare_for_tx' do
37
+ it 'should convert the request to a hash ready for transmission' do
38
+ subject.prepare_for_tx.should be_empty
39
+
40
+ described_class.new(
41
+ message: 'obj.method',
42
+ args: %w(test),
43
+ token: 'mytoken',
44
+ callback: proc{}
45
+ ).prepare_for_tx.should =={
46
+ 'args' => %w(test),
47
+ 'message' => 'obj.method',
48
+ 'token' => 'mytoken'
49
+ }
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Toq::Response do
4
+ subject { described_class.new }
5
+
6
+ describe '#obj' do
7
+ it 'should be an accessor' do
8
+ subject.obj = 'test'
9
+ subject.obj.should == 'test'
10
+ end
11
+ end
12
+
13
+ describe '#exception' do
14
+ it 'should be an accessor' do
15
+ subject.exception = 'test'
16
+ subject.exception.should == 'test'
17
+ end
18
+ end
19
+
20
+ describe '#exception?' do
21
+ context 'when #exception is not set' do
22
+ it 'returns false' do
23
+ subject.exception?.should be_false
24
+ end
25
+ end
26
+
27
+ context 'when #exception is set' do
28
+ it 'returns true' do
29
+ subject.exception = 'stuff'
30
+ subject.exception?.should be_true
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '#async?' do
36
+ context 'by default' do
37
+ it 'should return false' do
38
+ subject.async?.should be_false
39
+ end
40
+ end
41
+
42
+ context 'after #async!' do
43
+ it 'should return false' do
44
+ subject.async!
45
+ subject.async?.should be_true
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,129 @@
1
+ require 'spec_helper'
2
+
3
+ class Toq::Server
4
+ public :async?, :async_check, :object_exist?, :public_method?
5
+ attr_accessor :proxy
6
+ end
7
+
8
+ describe Toq::Server do
9
+ let(:options) { rpc_opts.merge( port: 7333 ) }
10
+ subject { start_server( options, true ) }
11
+
12
+ describe '#initialize' do
13
+ it 'should be able to properly setup class options' do
14
+ subject.opts.should == options
15
+ end
16
+
17
+ context 'when passed no connection information' do
18
+ it 'raises ArgumentError' do
19
+ begin
20
+ described_class.new({})
21
+ rescue => e
22
+ e.should be_kind_of ArgumentError
23
+ end
24
+ end
25
+ end
26
+
27
+ context 'when passed a host but not a port' do
28
+ it 'raises ArgumentError' do
29
+ begin
30
+ described_class.new( host: 'test' )
31
+ rescue => e
32
+ e.should be_kind_of ArgumentError
33
+ end
34
+ end
35
+ end
36
+
37
+ context 'when passed a port but not a host' do
38
+ it 'raises ArgumentError' do
39
+ begin
40
+ described_class.new( port: 9999 )
41
+ rescue => e
42
+ e.should be_kind_of ArgumentError
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'when passed an invalid port' do
48
+ it 'raises ArgumentError' do
49
+ begin
50
+ described_class.new( host: 'tt', port: 'blah' )
51
+ rescue => e
52
+ e.should be_kind_of ArgumentError
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ it 'retains the supplied token' do
59
+ subject.token.should == options[:token]
60
+ end
61
+
62
+ it 'has a Logger' do
63
+ subject.logger.class.should == ::Logger
64
+ end
65
+
66
+ describe '#alive?' do
67
+ it 'returns true' do
68
+ subject.should be_alive
69
+ end
70
+ end
71
+
72
+ describe '#async?' do
73
+ context 'when a method is async' do
74
+ it 'returns true' do
75
+ subject.async?( 'test', 'delay' ).should be_true
76
+ end
77
+ end
78
+
79
+ context 'when a method is sync' do
80
+ it 'returns false' do
81
+ subject.async?( 'test', 'foo' ).should be_false
82
+ end
83
+ end
84
+ end
85
+
86
+ describe '#async_check' do
87
+ context 'when a method is async' do
88
+ it 'returns true' do
89
+ subject.async_check( Test.new.method( :delay ) ).should be_true
90
+ end
91
+ end
92
+
93
+ context 'when a method is sync' do
94
+ it 'returns false' do
95
+ subject.async_check( Test.new.method( :foo ) ).should be_false
96
+ end
97
+ end
98
+ end
99
+
100
+ describe '#object_exist?' do
101
+ context 'when an object exists' do
102
+ it 'returns true' do
103
+ subject.object_exist?( 'test' ).should be_true
104
+ end
105
+ end
106
+
107
+ context 'when an object does not exist' do
108
+ it 'returns false' do
109
+ subject.object_exist?( 'foo' ).should be_false
110
+ end
111
+ end
112
+ end
113
+
114
+ describe '#public_method?' do
115
+ context 'when a method is public' do
116
+ it 'returns true' do
117
+ subject.public_method?( 'test', 'foo' ).should be_true
118
+ end
119
+ end
120
+
121
+ context 'when a method is non-existent or not public' do
122
+ it 'returns false' do
123
+ subject.public_method?( 'test', 'bar' ).should be_false
124
+ end
125
+ end
126
+ end
127
+
128
+ end
129
+
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: toq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tasos Laskos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: raktr
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.1
27
+ description: |2
28
+ Toq is a simple and lightweight Remote Procedure Call protocol
29
+ used to provide the basis for Arachni's distributed infrastructure.
30
+ email: tasos.laskos@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files:
34
+ - README.md
35
+ - LICENSE.md
36
+ - CHANGELOG.md
37
+ files:
38
+ - CHANGELOG.md
39
+ - LICENSE.md
40
+ - README.md
41
+ - Rakefile
42
+ - lib/toq.rb
43
+ - lib/toq/client.rb
44
+ - lib/toq/client/handler.rb
45
+ - lib/toq/exceptions.rb
46
+ - lib/toq/message.rb
47
+ - lib/toq/protocol.rb
48
+ - lib/toq/proxy.rb
49
+ - lib/toq/request.rb
50
+ - lib/toq/response.rb
51
+ - lib/toq/server.rb
52
+ - lib/toq/server/handler.rb
53
+ - lib/toq/version.rb
54
+ - spec/pems/cacert.pem
55
+ - spec/pems/client/cert.pem
56
+ - spec/pems/client/foo-cert.pem
57
+ - spec/pems/client/foo-key.pem
58
+ - spec/pems/client/key.pem
59
+ - spec/pems/server/cert.pem
60
+ - spec/pems/server/key.pem
61
+ - spec/servers/basic.rb
62
+ - spec/servers/server.rb
63
+ - spec/servers/unix_socket.rb
64
+ - spec/servers/with_ssl_primitives.rb
65
+ - spec/spec_helper.rb
66
+ - spec/toq/client_spec.rb
67
+ - spec/toq/exceptions_spec.rb
68
+ - spec/toq/message_spec.rb
69
+ - spec/toq/proxy_spec.rb
70
+ - spec/toq/request_spec.rb
71
+ - spec/toq/response_spec.rb
72
+ - spec/toq/server_spec.rb
73
+ homepage: https://github.com/qadron/toq
74
+ licenses:
75
+ - BSD 3-Clause
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options:
79
+ - "--charset=UTF-8"
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubygems_version: 3.1.6
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Simple RPC protocol.
97
+ test_files:
98
+ - spec/pems/server/cert.pem
99
+ - spec/pems/server/key.pem
100
+ - spec/pems/cacert.pem
101
+ - spec/pems/client/foo-key.pem
102
+ - spec/pems/client/cert.pem
103
+ - spec/pems/client/foo-cert.pem
104
+ - spec/pems/client/key.pem
105
+ - spec/servers/with_ssl_primitives.rb
106
+ - spec/servers/unix_socket.rb
107
+ - spec/servers/server.rb
108
+ - spec/servers/basic.rb
109
+ - spec/toq/client_spec.rb
110
+ - spec/toq/server_spec.rb
111
+ - spec/toq/request_spec.rb
112
+ - spec/toq/message_spec.rb
113
+ - spec/toq/response_spec.rb
114
+ - spec/toq/exceptions_spec.rb
115
+ - spec/toq/proxy_spec.rb
116
+ - spec/spec_helper.rb