source: rtos_arduino/trunk/arduino_lib/libraries/thingspeak-arduino/extras/test/testReadField/testReadField.ino@ 189

Last change on this file since 189 was 189, checked in by ertl-honda, 8 years ago

Thinkgspeakのサポート

File size: 10.4 KB
Line 
1#line 2 "testReadField.ino"
2/*
3 testReadField unit test
4
5 Unit Test for the readField function in the ThingSpeak Communication Library for Arduino
6
7 ThingSpeak ( https://www.thingspeak.com ) is a free IoT service for prototyping
8 systems that collect, analyze, and react to their environments.
9
10 This test use the ArduinoUnit 2.1.0 unit test framework. Visit https://github.com/mmurdoch/arduinounit to learn more.
11
12 Copyright 2015, The MathWorks, Inc.
13
14 Documentation for the ThingSpeak Communication Library for Arduino is in the extras/documentation folder where the library was installed.
15 See the accompaning licence.txt file for licensing information.
16*/
17
18#include <ArduinoUnit.h>
19#include <ThingSpeak.h>
20
21#ifdef ARDUINO_AVR_YUN
22 #include "YunClient.h"
23 YunClient client;
24#else
25 // Assume that we're using a wired Ethernet shield on a Mega
26 #include <SPI.h>
27 #include <Ethernet.h>
28 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
29 EthernetClient client;
30#endif
31
32unsigned long testPublicChannelNumber = 12397;
33unsigned long testPrivateChannelNumber = 31461;
34const char * testPrivateChannelReadAPIKey = "NKX4Z5JGO4M5I18A";
35const char * testPrivateChannelWriteAPIKey = "LD79EOAAWRVYF04Y";
36
37#define WRITE_DELAY_FOR_THINGSPEAK 15000
38
39test(readPublicFieldCase)
40{
41 // Test basic value read -- should give anything but 0
42 assertNotEqual(0.0,ThingSpeak.readFloatField(testPublicChannelNumber, 4));
43 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
44
45 // Test read of field out of range
46 assertEqual(0.0,ThingSpeak.readFloatField(testPublicChannelNumber, 0));
47 assertEqual(ERR_INVALID_FIELD_NUM,ThingSpeak.getLastReadStatus());
48 assertEqual(0.0,ThingSpeak.readFloatField(testPublicChannelNumber, 9));
49 assertEqual(ERR_INVALID_FIELD_NUM,ThingSpeak.getLastReadStatus());
50
51 // Test read of invalid channel #
52 assertEqual(0.0,ThingSpeak.readFloatField(0, 1));
53 assertEqual(ERR_BADURL,ThingSpeak.getLastReadStatus());
54 assertEqual(0.0,ThingSpeak.readFloatField(4294967295L, 1));
55 assertEqual(ERR_BADURL,ThingSpeak.getLastReadStatus());
56}
57
58test(readPrivateFieldCase)
59{
60 // Test basic value read -- should give anything but 0
61 assertNotEqual(0.0,ThingSpeak.readFloatField(testPrivateChannelNumber, 1, testPrivateChannelReadAPIKey));
62 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
63
64 // Test write with invalid API key
65 assertEqual(0.0,ThingSpeak.readFloatField(testPrivateChannelNumber, 1, "AFAKEAPIKEYFAKEX"));
66 // GECK 1235554: Expect thingspeak to return 404 -- it returns 200.
67 //assertEqual(ERR_BADURL,ThingSpeak.getLastReadStatus());
68 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
69}
70
71#ifdef ARDUINO_AVR_MEGA2560 // Only the mega has enough memory for all these tests
72test(ReadFloatFieldCase)
73{
74 // Always to ensure that rate limit isn't hit
75 delay(WRITE_DELAY_FOR_THINGSPEAK);
76
77 assertEqual(OK_SUCCESS,ThingSpeak.setField(1,(float)3.14159)); // float
78 assertEqual(OK_SUCCESS,ThingSpeak.setField(2,-47)); // integer
79 assertEqual(OK_SUCCESS,ThingSpeak.setField(3,(long)100000L)); // long
80 assertEqual(OK_SUCCESS,ThingSpeak.setField(4,(float)NAN)); // Nan
81 assertEqual(OK_SUCCESS,ThingSpeak.setField(5,"foobar")); // string
82 assertEqual(OK_SUCCESS,ThingSpeak.setField(6,(float)INFINITY)); // + inf
83 assertEqual(OK_SUCCESS,ThingSpeak.setField(7,(float)-INFINITY)); // + inf
84 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testPrivateChannelNumber, testPrivateChannelWriteAPIKey)); // string
85
86 // Test read as float
87 assertLess(abs((float)3.14159 - ThingSpeak.readFloatField(testPrivateChannelNumber, 1, testPrivateChannelReadAPIKey)),float(0.001));
88 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
89 assertEqual(-47.0,ThingSpeak.readFloatField(testPrivateChannelNumber, 2, testPrivateChannelReadAPIKey));
90 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
91 assertEqual(100000.0,ThingSpeak.readFloatField(testPrivateChannelNumber, 3, testPrivateChannelReadAPIKey));
92 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
93 assertTrue(isnan(ThingSpeak.readFloatField(testPrivateChannelNumber, 4, testPrivateChannelReadAPIKey)));
94 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
95 assertEqual(0.0,ThingSpeak.readFloatField(testPrivateChannelNumber, 5, testPrivateChannelReadAPIKey));
96 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
97 assertEqual(1,isinf(ThingSpeak.readFloatField(testPrivateChannelNumber, 6, testPrivateChannelReadAPIKey)));
98 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
99 // AVR compiler doesn't correctly test for negative infinite (http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__math_1ga18a7409e0b2341afaa41993960961772.html)
100 assertEqual(1,isinf(ThingSpeak.readFloatField(testPrivateChannelNumber, 7, testPrivateChannelReadAPIKey)));
101 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
102}
103
104test(ReadIntFieldCase)
105{
106 // Always wait 15 seconds to ensure that rate limit isn't hit
107 delay(WRITE_DELAY_FOR_THINGSPEAK);
108
109 ThingSpeak.setField(1,(float)3.14159); // float
110 ThingSpeak.setField(2,-47); // integer
111 ThingSpeak.setField(3,(long)100000L); // long
112 ThingSpeak.setField(4,(float)NAN); // Nan
113 ThingSpeak.setField(5,"foobar"); // string
114 ThingSpeak.setField(6,(float)INFINITY); // + inf
115 ThingSpeak.setField(7,(float)-INFINITY); // + inf
116 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testPrivateChannelNumber, testPrivateChannelWriteAPIKey)); // string
117
118 // Test read as int
119 assertEqual(3,ThingSpeak.readIntField(testPrivateChannelNumber, 1, testPrivateChannelReadAPIKey));
120 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
121 assertEqual(-47,ThingSpeak.readIntField(testPrivateChannelNumber, 2, testPrivateChannelReadAPIKey));
122 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
123 // Out of range
124 assertEqual(-31072,ThingSpeak.readIntField(testPrivateChannelNumber, 3, testPrivateChannelReadAPIKey));
125 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
126 // NAN
127 assertEqual(0,ThingSpeak.readIntField(testPrivateChannelNumber, 4, testPrivateChannelReadAPIKey));
128 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
129 // Text
130 assertEqual(0,ThingSpeak.readIntField(testPrivateChannelNumber, 5, testPrivateChannelReadAPIKey));
131 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
132 // INF
133 assertEqual(0,ThingSpeak.readIntField(testPrivateChannelNumber, 6, testPrivateChannelReadAPIKey));
134 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
135 // -INF
136 assertEqual(0,ThingSpeak.readIntField(testPrivateChannelNumber, 7, testPrivateChannelReadAPIKey));
137 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
138}
139
140test(ReadLongFieldCase)
141{
142 // Always wait 15 seconds to ensure that rate limit isn't hit
143 delay(WRITE_DELAY_FOR_THINGSPEAK);
144
145 ThingSpeak.setField(1,(float)3.14159); // float
146 ThingSpeak.setField(2,-47); // integer
147 ThingSpeak.setField(3,(long)100000L); // long
148 ThingSpeak.setField(4,(float)NAN); // Nan
149 ThingSpeak.setField(5,"foobar"); // string
150 ThingSpeak.setField(6,(float)INFINITY); // + inf
151 ThingSpeak.setField(7,(float)-INFINITY); // + inf
152 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testPrivateChannelNumber, testPrivateChannelWriteAPIKey)); // string
153
154 // Test read as long
155 assertEqual(3L,ThingSpeak.readLongField(testPrivateChannelNumber, 1, testPrivateChannelReadAPIKey));
156 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
157 assertEqual(-47L,ThingSpeak.readLongField(testPrivateChannelNumber, 2, testPrivateChannelReadAPIKey));
158 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
159 // Out of range
160 assertEqual(100000L,ThingSpeak.readLongField(testPrivateChannelNumber, 3, testPrivateChannelReadAPIKey));
161 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
162 // NAN
163 assertEqual(0L,ThingSpeak.readLongField(testPrivateChannelNumber, 4, testPrivateChannelReadAPIKey));
164 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
165 // Text
166 assertEqual(0L,ThingSpeak.readLongField(testPrivateChannelNumber, 5, testPrivateChannelReadAPIKey));
167 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
168 // INF
169 assertEqual(0L,ThingSpeak.readLongField(testPrivateChannelNumber, 6, testPrivateChannelReadAPIKey));
170 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
171 // -INF
172 assertEqual(0L,ThingSpeak.readLongField(testPrivateChannelNumber, 7, testPrivateChannelReadAPIKey));
173 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
174}
175
176test(ReadStringFieldCase)
177{
178 // Always wait 15 seconds to ensure that rate limit isn't hit
179 delay(WRITE_DELAY_FOR_THINGSPEAK);
180
181 ThingSpeak.setField(1,(float)3.14159); // float
182 ThingSpeak.setField(2,-47); // integer
183 ThingSpeak.setField(3,(long)100000L); // long
184 ThingSpeak.setField(4,(float)NAN); // Nan
185 ThingSpeak.setField(5,"foobar"); // string
186 ThingSpeak.setField(6,(float)INFINITY); // + inf
187 ThingSpeak.setField(7,(float)-INFINITY); // + inf
188 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testPrivateChannelNumber, testPrivateChannelWriteAPIKey)); // string
189
190 // Test read as long
191 assertEqual(String("3.14159"),ThingSpeak.readStringField(testPrivateChannelNumber, 1, testPrivateChannelReadAPIKey));
192 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
193
194 assertEqual(String("-47"),ThingSpeak.readStringField(testPrivateChannelNumber, 2, testPrivateChannelReadAPIKey));
195 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
196 // Out of range
197 assertEqual(String("100000"),ThingSpeak.readStringField(testPrivateChannelNumber, 3, testPrivateChannelReadAPIKey));
198 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
199 // NAN
200 assertEqual(String("NAN"),ThingSpeak.readStringField(testPrivateChannelNumber, 4, testPrivateChannelReadAPIKey));
201 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
202 // Text
203 assertEqual(String("foobar"),ThingSpeak.readStringField(testPrivateChannelNumber, 5, testPrivateChannelReadAPIKey));
204 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
205 // INF
206 assertEqual(String("INF"),ThingSpeak.readStringField(testPrivateChannelNumber, 6, testPrivateChannelReadAPIKey));
207 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
208 // -INF
209 assertEqual(String("-INF"),ThingSpeak.readStringField(testPrivateChannelNumber, 7, testPrivateChannelReadAPIKey));
210 assertEqual(OK_SUCCESS,ThingSpeak.getLastReadStatus());
211}
212#endif // Mega only tests
213
214void setup()
215{
216 Serial.begin(9600);
217 while(!Serial); // for the Arduino Leonardo/Micro only
218 #ifdef ARDUINO_AVR_YUN
219 Bridge.begin();
220 #else
221 Ethernet.begin(mac);
222 #endif
223 ThingSpeak.begin(client);
224}
225
226void loop()
227{
228 Test::run();
229}
230
Note: See TracBrowser for help on using the repository browser.