ardtweeno 0.0.2 → 0.2.5

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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +179 -1
  3. data/COPYING +4 -3
  4. data/Gemfile +29 -0
  5. data/Gemfile.lock +76 -0
  6. data/INSTALL +12 -0
  7. data/Procfile +1 -0
  8. data/README.md +26 -2
  9. data/Rakefile +14 -7
  10. data/lib/ardtweeno/api.rb +542 -0
  11. data/lib/ardtweeno/configreader.rb +65 -0
  12. data/lib/ardtweeno/db.rb +51 -0
  13. data/lib/ardtweeno/dispatcher.rb +538 -0
  14. data/lib/ardtweeno/exceptions.rb +33 -0
  15. data/lib/ardtweeno/node.rb +117 -0
  16. data/lib/ardtweeno/nodemanager.rb +300 -0
  17. data/lib/ardtweeno/packet.rb +98 -0
  18. data/lib/ardtweeno/restapi.rb +266 -0
  19. data/lib/ardtweeno/serialparser.rb +221 -0
  20. data/lib/ardtweeno.rb +120 -1
  21. data/public/glossy_green_button.svg +123 -0
  22. data/public/glossy_red_button.svg +75 -0
  23. data/public/main.css +129 -0
  24. data/public/raspberrypi.jpg +0 -0
  25. data/resources/conf.yaml +41 -0
  26. data/resources/nodelist.yaml +26 -0
  27. data/resources/serialparser.js +84 -0
  28. data/test/api_test.rb +255 -0
  29. data/test/dispatcher_test.rb +115 -0
  30. data/test/node_test.rb +105 -0
  31. data/test/nodemanager_test.rb +167 -0
  32. data/test/packet_test.rb +75 -0
  33. data/test/parser_test.rb +147 -0
  34. data/test/post_watch +11 -0
  35. data/test/rest_api_test.rb +248 -0
  36. data/test/run_mock +17 -0
  37. data/test/run_packet_push +14 -0
  38. data/test/serialport_mock.rb +43 -0
  39. data/test/test_helper.rb +15 -0
  40. data/test/tty0tty-1.1/AUTHORS +1 -0
  41. data/test/tty0tty-1.1/COPYING +340 -0
  42. data/test/tty0tty-1.1/INSTALL +18 -0
  43. data/test/tty0tty-1.1/README +52 -0
  44. data/test/tty0tty-1.1/THANKS +4 -0
  45. data/test/tty0tty-1.1/TODO +3 -0
  46. data/test/tty0tty-1.1/VERSION +4 -0
  47. data/test/tty0tty-1.1/module/Makefile +41 -0
  48. data/{bin/ardtweeno → test/tty0tty-1.1/module/Module.symvers} +0 -0
  49. data/test/tty0tty-1.1/module/modules.order +1 -0
  50. data/test/tty0tty-1.1/module/tty0tty.c +678 -0
  51. data/test/tty0tty-1.1/module/tty0tty.ko +0 -0
  52. data/test/tty0tty-1.1/module/tty0tty.mod.c +51 -0
  53. data/test/tty0tty-1.1/module/tty0tty.mod.o +0 -0
  54. data/test/tty0tty-1.1/module/tty0tty.o +0 -0
  55. data/test/tty0tty-1.1/pts/Makefile +10 -0
  56. data/test/tty0tty-1.1/pts/tty0tty +0 -0
  57. data/test/tty0tty-1.1/pts/tty0tty.c +222 -0
  58. data/views/createpost.erb +45 -0
  59. data/views/home.erb +59 -0
  60. metadata +89 -37
  61. data/README +0 -1
  62. data/test/Rakefile +0 -6
  63. data/test/features/ardtweeno.feature +0 -14
  64. data/test/features/step_definitions/ardtweeno_steps.rb +0 -24
data/test/node_test.rb ADDED
@@ -0,0 +1,105 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rack/test'
4
+ require 'ardtweeno'
5
+ require 'logger'
6
+ require 'json'
7
+
8
+ ENV['RACK_ENV'] = 'test'
9
+
10
+
11
+ class NodeTest < Test::Unit::TestCase
12
+
13
+ include Rack::Test::Methods
14
+
15
+ attr_accessor :node
16
+
17
+
18
+ # Test suite fixtures
19
+ def setup
20
+
21
+ Ardtweeno.setup({:test=>true, :log=>Logger.new(STDOUT), :level=>Logger::DEBUG})
22
+
23
+ nodename = "node01"
24
+ nodekey = "0123456789abcdef"
25
+
26
+ @node = Ardtweeno::Node.new(nodename, nodekey, {:version=>"0.5.0"})
27
+ @packetArray = Array.new
28
+
29
+ # Create 20 packets and add to the node
30
+ 20.times do |i|
31
+ newKey = "0123456789abcdef"
32
+ newData = [23.5, 997.8, 30]
33
+ newPacket = Ardtweeno::Packet.new(i, newKey, newData)
34
+
35
+ @packetArray << newPacket
36
+ end
37
+
38
+ end
39
+
40
+
41
+ # tear down the test fixtures between each test
42
+ def teardown
43
+ @node = nil
44
+ @packetArray = nil
45
+ end
46
+
47
+
48
+ # Test to ensure the Ardtweeno::Node#enqueue is working correctly
49
+ def test_enqueue
50
+
51
+ # Add the packets to the queue to test the enqueue method
52
+ begin
53
+ @packetArray.each {|i| @node.enqueue(i)}
54
+ rescue Exception => e
55
+ puts e.message
56
+ puts e.backtrace
57
+ end
58
+
59
+ # Test to ensure an attempt to queue an object other than an Ardtweeno::Node raises exception
60
+ assert_raise Ardtweeno::NotAPacket do
61
+ @node.enqueue(Hash.new)
62
+ end
63
+
64
+ end
65
+
66
+
67
+ # Test to ensure the Ardtweeno::Node#dequeue is working correctly
68
+ def test_dequeue
69
+
70
+ # Test to ensure an attempt to call dequeue on a Node with an empty list raises exception
71
+ assert_raise Ardtweeno::PacketListEmpty do
72
+ @node.dequeue
73
+ end
74
+
75
+ # Add the packets to the queue to test the enqueue method
76
+ begin
77
+ @packetArray.each {|i| @node.enqueue(i)}
78
+ rescue Exception => e
79
+ puts e.message
80
+ puts e.backtrace
81
+ end
82
+
83
+ # Ensure the packets dequeued are the same as the ones we enqueued
84
+ begin
85
+ @packetArray.each {|i| assert_equal(i, @node.dequeue)}
86
+ rescue Exception => e
87
+ puts e.message
88
+ puts e.backtrace
89
+ end
90
+
91
+ # Test to ensure an attempt to call dequeue on a Node with an empty list raises exception
92
+ assert_raise Ardtweeno::PacketListEmpty do
93
+ @node.dequeue
94
+ end
95
+
96
+ end
97
+
98
+
99
+ # Test to ensure the Ardtweeno::Node#to_s method is working correctly
100
+ def test_to_s
101
+ assert_equal(["node01, 0123456789abcdef, Default Description, 0.5.0, []", "[]"], @node.to_s)
102
+ end
103
+
104
+
105
+ end
@@ -0,0 +1,167 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rack/test'
4
+ require 'ardtweeno'
5
+ require 'logger'
6
+ require 'json'
7
+
8
+ ENV['RACK_ENV'] = 'test'
9
+
10
+
11
+ class NodeManagerTest < Test::Unit::TestCase
12
+
13
+ include Rack::Test::Methods
14
+
15
+ attr_accessor :dispatch
16
+
17
+
18
+ # Test suite fixtures
19
+ def setup
20
+
21
+ Ardtweeno.setup({:test=>true, :log=>Logger.new(STDOUT), :level=>Logger::DEBUG})
22
+
23
+ @init = Array.new
24
+
25
+ 6.upto(10) do |i|
26
+ @init << Ardtweeno::Node.new("node#{i}", "abcdef#{i}")
27
+ end
28
+
29
+ @nodeList = Array.new
30
+
31
+ 5.times do |i|
32
+ @nodeList << Ardtweeno::Node.new("node#{i}", "abcdef#{i}")
33
+ end
34
+
35
+ @nodemanager = Ardtweeno::NodeManager.new({:nodelist => @init})
36
+
37
+ @removeTest = Ardtweeno::Node.new("removetest", "testremove")
38
+
39
+ @watch = { :node=>@init[2], :notifyURL=> "http://example.org/",
40
+ :method=>"POST", :timeout=>"60" }
41
+
42
+ end
43
+
44
+
45
+ # tear down the test fixtures between each test
46
+ def teardown
47
+ @nodemanager = nil
48
+ @init = nil
49
+ @nodeList = nil
50
+ @removeTest = nil
51
+ @watch = nil
52
+ end
53
+
54
+
55
+ # Test to ensure the Ardtweeno::NodeManager#addNode method can successfully add
56
+ # an Ardtweeno::Node to the nodelist field.
57
+ def test_addNode
58
+
59
+ # Check to ensure each Node is successfully added to the system
60
+ @nodeList.each do |i|
61
+ assert_equal(true, @nodemanager.addNode(i))
62
+ end
63
+
64
+ finalArray = @init #+ @nodeList
65
+ # nodeList should contain the initial values and the ones we just added
66
+ assert_equal(finalArray, @nodemanager.nodeList)
67
+
68
+ # Test to ensure it will raise an exception if we try to add something other than an
69
+ # Ardtweeno::Node
70
+ assert_raise Ardtweeno::NotANode do
71
+ @nodemanager.addNode(Hash.new)
72
+ end
73
+ end
74
+
75
+
76
+ # Test to ensure the Ardtweeno::NodeManager#removeNode can successfully find and then
77
+ # delete the specified Ardtweeno::Node from the managed nodeList
78
+ def test_remove
79
+
80
+ # Add the testNode
81
+ @nodemanager.addNode(@removeTest)
82
+ # Before the removal
83
+ assert_equal(6, @nodemanager.nodeList.size)
84
+ testNode = @nodemanager.removeNode({:node => "removetest"})
85
+ assert_equal(testNode, @removeTest)
86
+ # After the removal
87
+ assert_equal(5, @nodemanager.nodeList.size)
88
+
89
+ # Add the testNode
90
+ @nodemanager.addNode(@removeTest)
91
+ # Before the removal
92
+ assert_equal(6, @nodemanager.nodeList.size)
93
+ testNode = @nodemanager.removeNode({:key => "testremove"})
94
+ assert_equal(testNode, @removeTest)
95
+ # After the removal
96
+ assert_equal(5, @nodemanager.nodeList.size)
97
+
98
+ # Test to ensure a search for a node not in the list raises an exception
99
+ assert_raise Ardtweeno::NotInNodeList do
100
+ @nodemanager.search({})
101
+ end
102
+
103
+ end
104
+
105
+
106
+ # Test to ensure the Ardtweeno::NodeManager#search method can successfully find
107
+ # an Ardtweeno::Node in the nodeList
108
+ def test_search
109
+
110
+ # Search using key
111
+ @init.each do |i|
112
+ assert_equal(i, @nodemanager.search({:key => i.key}))
113
+ end
114
+
115
+ # Search using node name
116
+ @init.each do |i|
117
+ assert_equal(i, @nodemanager.search({:node => i.node}))
118
+ end
119
+
120
+ # Test to ensure a search for a node not in the list raises an exception
121
+ assert_raise Ardtweeno::NotInNodeList do
122
+ @nodemanager.search({:key => @nodeList[0].key})
123
+ end
124
+
125
+ # Test to ensure a search for a node not in the list raises an exception
126
+ assert_raise Ardtweeno::NotInNodeList do
127
+ @nodemanager.search({:node => @nodeList[0].node})
128
+ end
129
+
130
+ # Test to ensure a search for a node not in the list raises an exception
131
+ assert_raise Ardtweeno::NotInNodeList do
132
+ @nodemanager.search({})
133
+ end
134
+
135
+ end
136
+
137
+
138
+ # Test to ensure the watched? works correctly
139
+ def test_watched?
140
+ # Check to ensure they are all unwatched initially
141
+ @init.each do |i|
142
+ assert_equal(false, @nodemanager.watched?(i))
143
+ end
144
+
145
+ # Add a watch and retest
146
+ @nodemanager.addWatch({ :node=>"node6",
147
+ :notifyURL=>"http://example.com",
148
+ :timeout=>"60",
149
+ :method=>"POST"
150
+ })
151
+
152
+ assert_nothing_raised do
153
+ assert_equal(true, @nodemanager.watched?(@init[0]))
154
+ end
155
+
156
+ assert_nothing_raised do
157
+ @nodemanager.removeWatch("node6")
158
+ end
159
+
160
+ assert_nothing_raised do
161
+ assert_equal(false, @nodemanager.watched?(@init[0]))
162
+ end
163
+
164
+ end
165
+
166
+
167
+ end
@@ -0,0 +1,75 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rack/test'
4
+ require 'ardtweeno'
5
+ require 'logger'
6
+ require 'json'
7
+
8
+ ENV['RACK_ENV'] = 'test'
9
+
10
+
11
+ class PacketTest < Test::Unit::TestCase
12
+
13
+ include Rack::Test::Methods
14
+
15
+ attr_accessor :packetArray
16
+
17
+
18
+ # Test suite fixtures, setup before each test is executed
19
+ def setup
20
+
21
+ Ardtweeno.setup({:test=>true, :log=>Logger.new(STDOUT), :level=>Logger::DEBUG})
22
+
23
+ # Create a DateTime instance
24
+ today = DateTime.now
25
+ @theDate = today.year.to_s() + "-" + "%02d" % today.month.to_s() + "-" + "%02d" % today.day.to_s()
26
+ @newHour = ("%02d" % today.hour).to_s
27
+ @newMinute = ("%02d" % today.min).to_s
28
+
29
+ # Instantiate the packetArray
30
+ @packetArray = Array.new
31
+
32
+ # Create 20 packets and add to the packetList
33
+ 20.times do |i|
34
+ newKey = "0123456789abcdef"
35
+ newData = [23.5, 997.8, 30]
36
+ newPacket = Ardtweeno::Packet.new(i, newKey, newData)
37
+
38
+ @packetArray << newPacket
39
+ end
40
+
41
+ end
42
+
43
+
44
+ # tear down the test fixtures between each test
45
+ def teardown
46
+ @packetArray = nil
47
+ end
48
+
49
+
50
+ # Test the Ardtweeno::Packet#to_s method
51
+ def test_to_s
52
+ @packetArray.each do |i|
53
+ assert_equal(
54
+ "Packet No: #{i.seqNo} Key: 0123456789abcdef Node: defaultNode Date: #{@theDate} #{@newHour}:#{@newMinute} Data: [23.5, 997.8, 30]",
55
+ i.to_s
56
+ )
57
+ end
58
+ end
59
+
60
+ # Test the Ardtweeno::Packet#to_json method
61
+ def test_to_json
62
+ str = "{\"date\":\"#{@theDate}\",\"hour\":\"#{@newHour}\",\"minute\":\"#{@newMinute
63
+ }\",\"node\":\"defaultNode\",\"key\":\"0123456789abcdef\",\"seqNo\":0,\"data\":[23.5,997.8,30]}"
64
+
65
+ assert_equal(str, @packetArray.first.to_json)
66
+
67
+ # Create JSON objects and compare
68
+ json1 = JSON.parse(str)
69
+ json2 = JSON.parse(@packetArray.first.to_json)
70
+
71
+ assert_equal(json1, json2)
72
+ end
73
+
74
+
75
+ end
@@ -0,0 +1,147 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rack/test'
4
+ require 'ardtweeno'
5
+ require 'logger'
6
+ require 'json'
7
+
8
+ ENV['RACK_ENV'] = 'test'
9
+
10
+
11
+ class ParserTest < Test::Unit::TestCase
12
+
13
+ include Rack::Test::Methods
14
+
15
+ attr_accessor :parser, :mock, :modem, :validdata, :invaliddata, :validdata_invalidnode, :thenode,
16
+ :themanager
17
+
18
+
19
+ # Test suite fixtures
20
+ def setup
21
+
22
+ Ardtweeno.setup({:test=>true, :log=>Logger.new(STDOUT), :level=>Logger::DEBUG})
23
+
24
+ @modem = fork do
25
+ Signal.trap("SIGTERM") { `killall tty0tty`; exit }
26
+ `test/tty0tty-1.1/pts/tty0tty`
27
+ end
28
+
29
+ sleep(1)
30
+
31
+ one = "/dev/pts/2"
32
+ two = "/dev/pts/3"
33
+
34
+ begin
35
+ @mock = SerialDeviceMock.new(one, 9600, 100)
36
+ @parser = Ardtweeno::SerialParser.new(two, 9600, 100)
37
+ rescue Exception => e
38
+ puts e.message
39
+ `killall tty0tty`
40
+ exit
41
+ end
42
+
43
+ @validdata = Ardtweeno::Packet.new(1, "abcvalidkey", [1,2,3])
44
+ @validdata_invalidnode = Ardtweeno::Packet.new(2, "abcinvalidkey", [1,2,3])
45
+ @invaliddata = {}
46
+
47
+ @thenode = Ardtweeno::Node.new("validnode", "abcvalidkey", {:sensors=>["a", "b", "c"]})
48
+ @themanager = Ardtweeno::NodeManager.new
49
+ @themanager.addNode(thenode)
50
+
51
+ end
52
+
53
+
54
+ # tear down the test fixtures between each test
55
+ def teardown
56
+ @validdata = nil
57
+ @validdata_invalidnode = nil
58
+ @invaliddata = nil
59
+ @themanager = nil
60
+ @thenode = nil
61
+ @mock.close
62
+ @parser.close
63
+ Process.kill("SIGTERM", @modem)
64
+ Process.wait
65
+ end
66
+
67
+
68
+ # Test Ardtweeno::SerialParser#store can store data correctly
69
+ def test_parser_store
70
+
71
+ # Valid data, with no NodeManager should raise Ardtweeno::ManagerNotDefined
72
+ assert_raise Ardtweeno::ManagerNotDefined do
73
+ @parser.store(@validdata)
74
+
75
+ end
76
+
77
+ # Now add the manager to the SerialParser
78
+ @parser.manager = @themanager
79
+
80
+ # Valid data, with valid NodeManager, but invalid node should raise Ardtweeno::NodeNotAuthorised
81
+ assert_raise Ardtweeno::NodeNotAuthorised do
82
+ @parser.store(@validdata_invalidnode)
83
+ end
84
+
85
+ # Valid data, with valid NodeManager, and valid node should store successfully
86
+ assert_equal(true, @parser.store(@validdata))
87
+
88
+ # Invalid data, should raise Ardtweeno::InvalidData exception
89
+ assert_raise Ardtweeno::InvalidData do
90
+ @parser.store(@invaliddata)
91
+ end
92
+
93
+ end
94
+
95
+
96
+ # Check Ardtweeno::SerialParser#write operates correctly
97
+ def test_parser_write
98
+
99
+ #Valid output
100
+ testData = {"seqNo" => 5, "data" => [23.5, 997.5, 65], "key" => "1234567890abcdef" }.to_json
101
+ assert_equal(true, @parser.write(testData))
102
+ val = @mock.read
103
+ assert_equal('{"seqNo":5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}', val)
104
+
105
+ # Invalid Input
106
+ testData2 = '{seqNo:5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}'
107
+ assert_equal(false, @parser.write(testData2))
108
+
109
+ end
110
+
111
+
112
+ # Check Ardtweeno::SerialParser#read can read data on serial device correctly
113
+ def test_parser_read
114
+
115
+ # Valid input
116
+ testData = {"seqNo" => 5, "data" => [23.5, 997.5, 65], "key" => "1234567890abcdef" }.to_json
117
+ @mock.write(testData)
118
+ val = @parser.read
119
+ assert_equal('{"seqNo":5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}', val)
120
+
121
+ # Invalid Input
122
+ testData2 = '{seqNo:5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}'
123
+ @mock.write(testData2)
124
+ val2 = @parser.read
125
+ assert_equal('{}', val2)
126
+
127
+ end
128
+
129
+
130
+ # Check Ardtweeno::SerialParser#valid_json? can validate JSON data correctly
131
+ def test_parser_validate_input
132
+ valid = '{"seqNo":5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}'
133
+ assert_equal(true, Ardtweeno::SerialParser.valid_json?(valid))
134
+
135
+ invalid = '{seqNo:5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}'
136
+ assert_equal(false, Ardtweeno::SerialParser.valid_json?(invalid))
137
+ end
138
+
139
+
140
+ # Check Ardtweeno::SerialParser#nextSeq returns unique values each call
141
+ def test_parser_next_seq
142
+ 20.times do |i|
143
+ assert_equal(i, @parser.nextSeq)
144
+ end
145
+ end
146
+
147
+ end
data/test/post_watch ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'typhoeus'
3
+ require 'json'
4
+
5
+
6
+ body = {:key=> "1230aea77d7bd38898fec74a75a87738dea9f657",
7
+ :notifyURL=>"",
8
+ :method=>"POST",
9
+ :timeout=>"60"}
10
+
11
+ puts Typhoeus::Request.post("http://localhost:4567/api/v1/watch/node2", :body=>body)