reliable-msg-agent 0.0.2 → 0.0.3

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.
data/History.txt CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ == 0.0.3 2011-03-31
3
+
4
+ * Added testcase for Service class.
5
+ * Changed target default. (queue.* to queue.agent)
6
+ * bugfix: Message could not be acquired from ReliableMsg(!=Ap4r-queue)
7
+
2
8
  == 0.0.2 2011-03-19
3
9
 
4
10
  * resources/ was includ in gemfiles.
@@ -19,8 +19,8 @@ module ReliableMsg::Agent #:nodoc:
19
19
  # +conf+ :: consumer configurations.
20
20
  # +options+ :: the options (it is still unused.)
21
21
  #
22
- def call msg, options = {}
23
- raise AgentError, "#call(msg,options={}) not implemented!"
22
+ def call msg, conf, options = {}
23
+ raise AgentError, "#call(msg,conf,options={}) not implemented!"
24
24
  end
25
25
  end
26
26
  end
@@ -5,15 +5,35 @@ require "reliable-msg/agent"
5
5
  require "monitor"
6
6
 
7
7
  module ReliableMsg::Agent #:nodoc:
8
+
9
+ # Class of consumers for reliable-msg queue massaging.
10
+ #
11
+ # It has the function to make the agent acquire the message
12
+ # from ReliableMsg-Queue of the object and execute processing.
13
+ #
8
14
  class Consumers
9
15
 
10
16
  @@default_options = {
11
17
  "source_uri" => "druby://localhost:6438",
12
- "target" => "queue.*",
18
+ "target" => "queue.agent",
13
19
  "every" => 1.0,
14
20
  "threads" => 1,
15
21
  }.freeze
16
22
 
23
+ # Initialize.
24
+ #
25
+ # === Args
26
+ #
27
+ # +logger+ :: the logger.
28
+ # +options+ :: consumers options.
29
+ #
30
+ # valid options for +options+ are:
31
+ #
32
+ # +source_uri+ :: uri for source reliable-msg queue.
33
+ # +target+ :: target queue name for source reliable-msg queue.
34
+ # +every+ :: interval seconds when connection fails
35
+ # +threads+ :: times for consumer threads.
36
+ #
17
37
  def initialize logger, options
18
38
  @logger = logger
19
39
  @options = options
@@ -22,6 +42,8 @@ module ReliableMsg::Agent #:nodoc:
22
42
  @threads = nil
23
43
  end
24
44
 
45
+ # Start consumers.
46
+ #
25
47
  def start
26
48
  @locker.synchronize {
27
49
  raise AgentError, "workers already started." if alive?
@@ -38,6 +60,8 @@ module ReliableMsg::Agent #:nodoc:
38
60
  }
39
61
  end
40
62
 
63
+ # Stop consumers.
64
+ #
41
65
  def stop
42
66
  @locker.synchronize {
43
67
  raise AgentError, "workers already stopped." unless alive?
@@ -51,10 +75,18 @@ module ReliableMsg::Agent #:nodoc:
51
75
  }
52
76
  end
53
77
 
78
+ # Return the state of alive or not alive.
79
+ #
54
80
  def alive?; @locker.synchronize { !! @threads }; end
55
81
 
56
82
  private
57
83
 
84
+ # Loop for consumer.
85
+ #
86
+ # === Args
87
+ #
88
+ # +conf+:: consumer configurations.
89
+ #
58
90
  def consuming_loop conf
59
91
  agent = Agent.new @logger
60
92
  uri, every, target = conf["source_uri"], conf["every"], conf["target"]
@@ -78,12 +110,22 @@ module ReliableMsg::Agent #:nodoc:
78
110
  end
79
111
  end
80
112
 
113
+ # Test for connect to reliable-msg queue manager.
114
+ # Returns valid queue-name.
115
+ #
116
+ # === Args
117
+ #
118
+ # +qm+ :: the queue manager.
119
+ # +target+ :: target queue name for source reliable-msg queue.
120
+ # +uri+ :: uri for source reliable-msg queue.
121
+ # +every+ :: interval seconds when connection fails
122
+ #
81
123
  def connect_qm qm, target, uri, every
82
124
  error_raised = false
83
125
  begin
84
- queue_name = qm.stale_queue target
126
+ raise "queue-manager is not alive." unless qm.alive?
85
127
  @logger.warn { "Connect to #{uri} successfully at #{Time.now}" } if error_raised
86
- return queue_name
128
+ return target
87
129
 
88
130
  rescue => e
89
131
  @logger.warn { "Lost connection to #{uri} at #{Time.now} - #{e.message}" } unless error_raised
@@ -94,6 +136,14 @@ module ReliableMsg::Agent #:nodoc:
94
136
  end
95
137
  end
96
138
 
139
+ # Fetch message from reliable-msg queue.
140
+ # Return evaluation result of yield.
141
+ #
142
+ # === Args
143
+ #
144
+ # +queue_name+ :: queue name for source reliable-msg queue.
145
+ # +source_uri+ :: uri for source reliable-msg queue.
146
+ #
97
147
  def fetch queue_name, source_uri
98
148
  ReliableMsg::Queue.new(queue_name, :drb_uri => source_uri).get { |m|
99
149
  begin
@@ -5,40 +5,93 @@ require "reliable-msg/agent"
5
5
  require "monitor"
6
6
 
7
7
  module ReliableMsg::Agent #:nodoc:
8
+
9
+ # Class of ReliableMsg-Agent service
10
+ #
8
11
  class Service
12
+
13
+ # Initialilze.
14
+ #
15
+ # === Args
16
+ #
17
+ # +logger+ :: the logger.
18
+ # +options+ :: service options.
19
+ #
9
20
  def initialize logger, options = {}
10
21
  @logger = logger
11
22
  @options = options
12
23
 
13
- @workers = Consumers.new @logger, @options["consumers"]
24
+ @consumers = @@dependency_classes[:Consumers].new @logger, @options["consumers"]
14
25
  @locker = Monitor.new
15
26
  end
16
27
 
28
+ # Start service.
29
+ #
17
30
  def start
18
31
  @locker.synchronize {
19
32
  raise AgentError, "service already started." if alive?
20
33
 
21
34
  @logger.info { "*** reliable-msg agent service starting..." }
22
- @workers.start
35
+ @consumers.start
23
36
  @logger.info { "*** reliable-msg agent service started." }
24
37
  }
25
38
  end
26
39
 
40
+ # Stop service.
41
+ #
27
42
  def stop
28
43
  @locker.synchronize {
29
44
  raise AgentError, "service already stopped." unless alive?
30
45
 
31
46
  @logger.info { "*** reliable-msg agent service stopping..." }
32
- @workers.stop
47
+ @consumers.stop
33
48
  @logger.info { "*** reliable-msg agent service stopped." }
34
49
  }
35
50
  end
36
51
 
52
+ # Return the state of alive or not alive.
53
+ #
37
54
  def alive?
38
55
  @locker.synchronize {
39
- !! @workers.alive?
56
+ !! @consumers.alive?
40
57
  }
41
58
  end
59
+
60
+ # For testcase. To replace the class for which Service depends with Mock.
61
+ #
62
+ # === Example
63
+ #
64
+ # # Change method scope.
65
+ # Service.class_eval {
66
+ # public_class_method :dependency_classes
67
+ # public_class_method :dependency_classes_init
68
+ # }
69
+ #
70
+ # # Consumers is replaced with ConsumersMock.
71
+ # Service.dependency_classes[:Consumers] = ConsumersMock
72
+ #
73
+ # # test code that uses ConsumersMock...
74
+ # test_foo
75
+ # test_bar
76
+ #
77
+ # # re-init.
78
+ # Service.dependency_classes_init
79
+ #
80
+ def self.dependency_classes
81
+ @@dependency_classes
82
+ end
83
+ private_class_method :dependency_classes
84
+
85
+ # For testcase. Dependency classes is initialized.
86
+ #
87
+ def self.dependency_classes_init
88
+ @@dependency_classes = {
89
+ :Consumers => Consumers,
90
+ }
91
+ end
92
+ private_class_method :dependency_classes_init
93
+ dependency_classes_init
94
+
42
95
  end
43
96
  end
44
97
 
@@ -7,7 +7,7 @@ module ReliableMsg::Agent #:nodoc:
7
7
  unless defined? MAJOR
8
8
  MAJOR = 0
9
9
  MINOR = 0
10
- TINY = 2
10
+ TINY = 3
11
11
  PRE = nil
12
12
 
13
13
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
data/resources/agent.conf CHANGED
@@ -8,6 +8,6 @@ consumers:
8
8
  -
9
9
  source_uri: druby://localhost:6438
10
10
  every: 1.0
11
- target: queue.*
11
+ target: queue.agent
12
12
  threads: 1
13
13
 
@@ -8,6 +8,6 @@ consumers:
8
8
  -
9
9
  source_uri: druby://localhost:6438
10
10
  every: 1.0
11
- target: queue.*
11
+ target: queue.agent
12
12
  threads: 1
13
13
 
@@ -8,6 +8,6 @@ consumers:
8
8
  -
9
9
  source_uri: druby://localhost:6438
10
10
  every: 1.0
11
- target: queue.*
11
+ target: queue.agent
12
12
  threads: 1
13
13
 
@@ -8,6 +8,6 @@ consumers:
8
8
  -
9
9
  source_uri: druby://localhost:6438
10
10
  every: 1.0
11
- target: queue.*
11
+ target: queue.agent
12
12
  threads: 1
13
13
 
data/spec/service_spec.rb CHANGED
@@ -5,8 +5,12 @@ require "logger"
5
5
 
6
6
  describe ReliableMsg::Agent::Service do
7
7
  before do
8
- logger = Logger.new(nil)
9
- conf = {
8
+ @times_of_start_stop = 30
9
+
10
+ @logger = Logger.new(nil)
11
+ @conf = {
12
+ "foo" => "bar",
13
+ "baz" => "qux",
10
14
  "consumers" => [
11
15
  {
12
16
  "source_uri" => "druby://localhost:6438",
@@ -16,31 +20,90 @@ describe ReliableMsg::Agent::Service do
16
20
  },
17
21
  ],
18
22
  }
19
- @s = ReliableMsg::Agent::Service.new logger, conf
20
23
  end
21
24
 
22
- it "should be able to #start" do
23
- @s.start
24
- end
25
+ describe "When initialize" do
26
+ before do
27
+ @s = ReliableMsg::Agent::Service.new @logger, @conf
28
+ end
25
29
 
26
- it "should not be alive" do
27
- @s.alive?.should_not be_true
30
+ it "should be able to #start" do
31
+ @s.start
32
+ end
33
+
34
+ it "should not be able to #stop" do
35
+ Proc.new {
36
+ @s.stop
37
+ }.should raise_error ReliableMsg::Agent::AgentError
38
+ end
39
+
40
+ it "should not be alive" do
41
+ @s.alive?.should_not be_true
42
+ end
43
+
44
+ describe "When started" do
45
+ before do
46
+ @s.start
47
+ end
48
+
49
+ it "should not be able to #start" do
50
+ Proc.new {
51
+ @s.start
52
+ }.should raise_error ReliableMsg::Agent::AgentError
53
+ end
54
+
55
+ it "should be able to #stop" do
56
+ @s.stop
57
+ end
58
+
59
+ it "should be alive" do
60
+ @s.alive?.should be_true
61
+ end
62
+
63
+ end
64
+
65
+ it "should be able to #start > #stop > #start > ..." do
66
+ @times_of_start_stop.times {
67
+ @s.start
68
+ @s.stop
69
+ }
70
+ end
71
+
72
+ after do
73
+ @s.stop rescue nil
74
+ @s = nil
75
+ end
28
76
  end
29
77
 
30
- describe "When started" do
78
+ describe "When replace the mock classes depend Service" do
31
79
  before do
32
- @s.start
33
- end
80
+ @consumers = mock ReliableMsg::Agent::Consumers
81
+ @consumers.stub!(:new).and_return @consumers
82
+
83
+ @consumers.stub!(:start)
84
+ @consumers.stub!(:stop)
85
+ @consumers.stub!(:alive?).and_return(true)
34
86
 
35
- it "should be alive" do
36
- @s.alive?.should be_true
87
+ ReliableMsg::Agent::Service.class_eval {
88
+ public_class_method :dependency_classes
89
+ public_class_method :dependency_classes_init
90
+ }
91
+ ReliableMsg::Agent::Service.dependency_classes[:Consumers] = @consumers
92
+ end
93
+
94
+ describe "When initialize" do
95
+ it "mockclass should receive #new(@logger, @conf['consumers']) exactly 1" do
96
+ @consumers.should_receive(:new).
97
+ with(@logger, @conf["consumers"]).
98
+ exactly(1)
99
+ ReliableMsg::Agent::Service.new @logger, @conf
100
+ end
101
+ end
102
+
103
+ after do
104
+ ReliableMsg::Agent::Service.dependency_classes_init
37
105
  end
38
-
39
106
  end
40
107
 
41
- after do
42
- @s.stop rescue nil
43
- @s = nil
44
- end
45
108
  end
46
109
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reliable-msg-agent
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - hamajyotan
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-19 00:00:00 +09:00
18
+ date: 2011-03-31 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency