blinky 0.0.3 → 0.0.4
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/.gitignore +21 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +30 -0
- data/README.rdoc +22 -16
- data/Rakefile +4 -39
- data/blinky.gemspec +20 -66
- data/lib/blinky.rb +10 -10
- data/lib/blinky/light.rb +8 -8
- data/lib/blinky/light_factory.rb +3 -3
- data/lib/blinky/no_supported_devices_found.rb +2 -2
- data/lib/blinky/version.rb +3 -0
- data/lib/ci_server_plugins/test_server_plugin.rb +7 -7
- data/lib/device_recipes/delcom_engineering/visual_indicator_gen_one.rb +6 -6
- data/lib/device_recipes/delcom_engineering/visual_indicator_gen_two.rb +6 -6
- data/spec/acceptance_spec.rb +102 -102
- data/spec/blinky_spec.rb +14 -14
- data/spec/ci_server_plugins/test_server_plugin_spec.rb +29 -29
- data/spec/fixtures/ci_server_plugins/mock_ci_server.rb +3 -3
- data/spec/fixtures/device_recipes/aenima_engineering/model_462.rb +2 -2
- data/spec/fixtures/device_recipes/aenima_engineering/model_eulogy.rb +2 -2
- data/spec/fixtures/device_recipes/fragile_engineering/wretched.rb +4 -4
- data/spec/light_factory_spec.rb +46 -46
- data/spec/light_spec.rb +27 -27
- data/spec/spec_helper.rb +2 -3
- metadata +82 -70
- data/VERSION +0 -1
@@ -2,27 +2,27 @@ module Blinky
|
|
2
2
|
module DelcomEngineering
|
3
3
|
module VisualIndicator
|
4
4
|
module GenerationII
|
5
|
-
|
5
|
+
|
6
6
|
def success!
|
7
7
|
set_colour("\x01")
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def failure!
|
11
11
|
set_colour("\x02")
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def building!
|
15
15
|
set_colour("\x04")
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def warning!
|
19
19
|
set_colour("\x07")
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def off!
|
23
23
|
set_colour("\x00")
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
private
|
27
27
|
def set_colour colour
|
28
28
|
@handle.usb_control_msg(0x21, 0x09, 0x0635, 0x000, "\x65\x0C#{colour}\xFF\x00\x00\x00\x00", 0)
|
data/spec/acceptance_spec.rb
CHANGED
@@ -2,16 +2,16 @@ require File.join(File.dirname(__FILE__), '/spec_helper')
|
|
2
2
|
|
3
3
|
module Blinky
|
4
4
|
describe "Blinky" do
|
5
|
-
|
5
|
+
|
6
6
|
describe "that has a supported device connected" do
|
7
|
-
|
7
|
+
|
8
8
|
before(:each) do
|
9
|
-
@supported_device =
|
9
|
+
@supported_device = double("supported device",:idVendor => 0x2000, :idProduct => 0x2222)
|
10
10
|
self.connected_devices = [
|
11
|
-
|
11
|
+
double("unsupported device A",:idVendor => 0x1234, :idProduct => 0x5678),
|
12
12
|
@supported_device,
|
13
|
-
|
14
|
-
|
13
|
+
double("unsupported device B",:idVendor => 0x5678, :idProduct => 0x1234)
|
14
|
+
]
|
15
15
|
@blinky = Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
16
16
|
end
|
17
17
|
|
@@ -24,7 +24,7 @@ module Blinky
|
|
24
24
|
@supported_device.should_receive(:indicate_success)
|
25
25
|
@blinky.light.success!
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
it "can provide a light that can show where it is" do
|
29
29
|
@supported_device.should_receive(:indicate_failure).ordered
|
30
30
|
@supported_device.should_receive(:indicate_success).ordered
|
@@ -40,111 +40,111 @@ module Blinky
|
|
40
40
|
|
41
41
|
@blinky.light.where_are_you?
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
describe "that supports two devices from the same vendor" do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
47
|
+
|
48
|
+
it "can provide a light that can control the first device" do
|
49
|
+
supported_device_one = double("supported device one", :idVendor => 0x1000, :idProduct => 0x1111)
|
50
|
+
self.connected_devices = [supported_device_one]
|
51
|
+
@blinky = Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
52
|
+
supported_device_one.should_receive(:indicate_success)
|
53
|
+
@blinky.light.success!
|
54
|
+
end
|
55
|
+
|
56
|
+
it "can provide a light that can control the second device" do
|
57
|
+
supported_device_two = double("supported device two", :idVendor => 0x1000, :idProduct => 0x2222)
|
58
|
+
self.connected_devices = [supported_device_two]
|
59
|
+
@blinky = Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
60
|
+
supported_device_two.should_receive(:indicate_success)
|
61
|
+
@blinky.light.success!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
65
|
describe "that has no supported devices connected" do
|
66
66
|
|
67
67
|
before(:each) do
|
68
68
|
@devices = [
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
double("unsupported device", :idVendor => 0x1234, :idProduct => 0x5678),
|
70
|
+
double("unsupported device", :idVendor => 0x5678, :idProduct => 0x1234)
|
71
|
+
]
|
72
|
+
self.connected_devices= @devices
|
73
|
+
end
|
74
|
+
|
75
|
+
it "will complain" do
|
76
|
+
exception = Exception.new("foo")
|
77
|
+
NoSupportedDevicesFound.should_receive(:new).with(@devices).and_return(exception)
|
78
|
+
lambda{Blinky.new("#{File.dirname(__FILE__)}/fixtures")}.should raise_error("foo")
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "that has no supported devices connected - but does have one from the same vendor" do
|
84
|
+
|
85
|
+
before(:each) do
|
86
|
+
@devices = [
|
87
|
+
double("unsupported device from known vendor", :idVendor => 0x1000, :idProduct => 0x5678),
|
88
|
+
double("unsupported device", :idVendor => 0x5678, :idProduct => 0x1234)
|
89
|
+
]
|
90
|
+
self.connected_devices= @devices
|
73
91
|
end
|
74
|
-
|
92
|
+
|
75
93
|
it "will complain" do
|
76
94
|
exception = Exception.new("foo")
|
77
95
|
NoSupportedDevicesFound.should_receive(:new).with(@devices).and_return(exception)
|
78
96
|
lambda{Blinky.new("#{File.dirname(__FILE__)}/fixtures")}.should raise_error("foo")
|
79
97
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
@light = Blinky.new("#{File.dirname(__FILE__)}/fixtures").light
|
133
|
-
end
|
134
|
-
|
135
|
-
it "can receive call backs from the server" do
|
136
|
-
@light.should_receive(:notify_build_status)
|
137
|
-
@light.watch_mock_ci_server
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
def connected_devices= devices
|
143
|
-
devices.each do |device|
|
144
|
-
device.stub!(:usb_open).and_return(device)
|
145
|
-
end
|
146
|
-
USB.stub!(:devices).and_return(devices)
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "that has two supported devices connected" do
|
102
|
+
|
103
|
+
before(:each) do
|
104
|
+
@supported_device_one = double("supported device A",:idVendor => 0x1000, :idProduct => 0x1111)
|
105
|
+
@supported_device_two = double("supported device B",:idVendor => 0x2000, :idProduct => 0x2222)
|
106
|
+
|
107
|
+
self.connected_devices = [
|
108
|
+
double("unsupported device", :idVendor => 0x1234, :idProduct => 0x5678),
|
109
|
+
@supported_device_one,
|
110
|
+
@supported_device_two
|
111
|
+
]
|
112
|
+
@blinky = Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
113
|
+
end
|
114
|
+
|
115
|
+
it "will provide two lights" do
|
116
|
+
@blinky.light.should_not be_nil
|
117
|
+
@blinky.lights.length.should == 2
|
118
|
+
end
|
119
|
+
|
120
|
+
it "can provide lights that can control thedevices" do
|
121
|
+
@supported_device_one.should_receive(:indicate_success)
|
122
|
+
@supported_device_two.should_receive(:indicate_success)
|
123
|
+
@blinky.lights[0].success!
|
124
|
+
@blinky.lights[1].success!
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "that provides a light that is asked to watch a supported CI server" do
|
129
|
+
|
130
|
+
before(:each) do
|
131
|
+
self.connected_devices = [double("device",:idVendor => 0x1000, :idProduct => 0x1111)]
|
132
|
+
@light = Blinky.new("#{File.dirname(__FILE__)}/fixtures").light
|
133
|
+
end
|
134
|
+
|
135
|
+
it "can receive call backs from the server" do
|
136
|
+
@light.should_receive(:notify_build_status)
|
137
|
+
@light.watch_mock_ci_server
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
def connected_devices= devices
|
143
|
+
devices.each do |device|
|
144
|
+
device.stub!(:usb_open).and_return(device)
|
145
|
+
end
|
146
|
+
USB.stub!(:devices).and_return(devices)
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
150
|
end
|
data/spec/blinky_spec.rb
CHANGED
@@ -4,7 +4,7 @@ Dir["#{File.dirname(__FILE__)}/fixtures/ci_server_plugins/**/*.rb"].each { |f| r
|
|
4
4
|
|
5
5
|
module Blinky
|
6
6
|
describe "Blinky" do
|
7
|
-
|
7
|
+
|
8
8
|
it "will construct a light factory with the available plugins and recipes" do
|
9
9
|
expected_plugins = [MockCiServer]
|
10
10
|
expected_recipes = {
|
@@ -14,19 +14,19 @@ module Blinky
|
|
14
14
|
LightFactory.should_receive(:detect_lights).with( expected_plugins, expected_recipes).and_return([])
|
15
15
|
Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it "will make lights from the light factory available" do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
expected_plugins = [MockCiServer]
|
20
|
+
expected_recipes = {
|
21
|
+
0x1000 => { 0x2222 => AenimaEngineering::ModelEulogy, 0x1111 => AenimaEngineering::Model462 },
|
22
|
+
0x2000 => { 0x2222 => FragileEngineering::ModelWretched }
|
23
|
+
}
|
24
|
+
lights = ["light one", "light two"]
|
25
|
+
LightFactory.should_receive(:detect_lights).and_return(lights)
|
26
|
+
blinky = Blinky.new("#{File.dirname(__FILE__)}/fixtures")
|
27
|
+
|
28
|
+
blinky.lights.should eql lights
|
29
|
+
blinky.light.should == "light one"
|
30
|
+
end
|
31
31
|
end
|
32
32
|
end
|
@@ -1,34 +1,34 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', '/spec_helper')
|
2
2
|
require 'ci_server_plugins/test_server_plugin'
|
3
3
|
module Blinky
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
class StubBlinky
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "TestCiServer" do
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
@blinky = StubBlinky.new
|
12
|
+
@blinky.extend(TestCiServer)
|
6
13
|
end
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
@blinky.should_receive(:sleep).ordered
|
28
|
-
@blinky.should_receive(:off!).ordered
|
29
|
-
|
30
|
-
@blinky.watch_test_server
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
14
|
+
|
15
|
+
it "cycles through all possible statuses" do
|
16
|
+
@blinky.should_receive(:building!).ordered
|
17
|
+
@blinky.should_receive(:sleep).ordered
|
18
|
+
@blinky.should_receive(:failure!).ordered
|
19
|
+
@blinky.should_receive(:sleep).ordered
|
20
|
+
@blinky.should_receive(:building!).ordered
|
21
|
+
@blinky.should_receive(:sleep).ordered
|
22
|
+
@blinky.should_receive(:warning!).ordered
|
23
|
+
@blinky.should_receive(:sleep).ordered
|
24
|
+
@blinky.should_receive(:building!).ordered
|
25
|
+
@blinky.should_receive(:sleep).ordered
|
26
|
+
@blinky.should_receive(:success!).ordered
|
27
|
+
@blinky.should_receive(:sleep).ordered
|
28
|
+
@blinky.should_receive(:off!).ordered
|
29
|
+
|
30
|
+
@blinky.watch_test_server
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
34
|
end
|
@@ -1,19 +1,19 @@
|
|
1
1
|
module Blinky
|
2
2
|
module FragileEngineering
|
3
3
|
module ModelWretched
|
4
|
-
|
4
|
+
|
5
5
|
def success!
|
6
6
|
@handle.indicate_success
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def failure!
|
10
|
-
|
10
|
+
@handle.indicate_failure
|
11
11
|
end
|
12
12
|
|
13
13
|
def off!
|
14
14
|
@handle.turn_off
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/spec/light_factory_spec.rb
CHANGED
@@ -1,64 +1,64 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '/spec_helper')
|
2
2
|
|
3
3
|
module Blinky
|
4
|
-
|
4
|
+
|
5
5
|
module RecipeOne
|
6
6
|
end
|
7
7
|
|
8
8
|
module RecipeTwo
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
describe "LightFactory" do
|
12
|
-
|
12
|
+
|
13
13
|
before do
|
14
|
-
|
15
|
-
@device_one =
|
16
|
-
@device_two =
|
14
|
+
|
15
|
+
@device_one = double("device one", :idVendor => 0x1234, :idProduct => 0x5678)
|
16
|
+
@device_two = double("device two",:idVendor => 0x5678, :idProduct => 0x1234)
|
17
17
|
@connected_devices = [@device_one, @device_two]
|
18
18
|
self.connected_devices = @connected_devices
|
19
19
|
|
20
20
|
@plugins = [MockCiPlugin]
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it "will build a light for each connected device for which we have a recipe" do
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
24
|
+
recipes = Hash.new({})
|
25
|
+
recipes[0x1234] = {0x5678 => RecipeOne}
|
26
|
+
recipes[0x5678] = {0x1234 => RecipeTwo}
|
27
|
+
|
28
|
+
Light.should_receive(:new).with(@device_one, RecipeOne , @plugins).and_return("light one")
|
29
|
+
Light.should_receive(:new).with(@device_two, RecipeTwo , @plugins).and_return("light two")
|
30
|
+
|
31
|
+
lights = LightFactory.detect_lights(@plugins, recipes)
|
32
|
+
lights.should include "light one"
|
33
|
+
lights.should include "light two"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "will not build a light for a connected device for which we have no recipe" do
|
37
|
+
recipes = Hash.new({})
|
38
|
+
recipes[0x1234] = {0x5678 => RecipeOne}
|
39
|
+
|
40
|
+
Light.stub!(:new).and_return("no recipe light")
|
41
|
+
Light.should_receive(:new).with(@device_one, RecipeOne , @plugins).and_return("light one")
|
42
|
+
|
43
|
+
lights = LightFactory.detect_lights(@plugins, recipes)
|
44
|
+
lights.should eql ["light one"]
|
45
|
+
end
|
46
|
+
|
47
|
+
it "will complain if there are no connected lights for which we have a recipe" do
|
48
|
+
recipes = Hash.new({})
|
49
|
+
recipes[0x9999] = {0x9999 => RecipeOne}
|
50
|
+
|
51
|
+
exception = Exception.new("foo")
|
52
|
+
NoSupportedDevicesFound.should_receive(:new).with(@connected_devices).and_return(exception)
|
53
|
+
lambda{LightFactory.detect_lights(@plugins, recipes)}.should raise_error("foo")
|
54
|
+
end
|
55
|
+
|
56
|
+
def connected_devices= devices
|
57
|
+
devices.each do |device|
|
58
|
+
device.stub!(:usb_open).and_return(device)
|
59
|
+
end
|
60
|
+
USB.stub!(:devices).and_return(devices)
|
61
|
+
end
|
62
|
+
|
63
63
|
end
|
64
64
|
end
|