toq 0.0.1

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.
@@ -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