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

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

Thinkgspeakのサポート

File size: 5.9 KB
Line 
1#line 2 "testSetField.ino"
2/*
3 testSetField unit test
4
5 Unit Test for the writeFields and setField functions 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 testChannelNumber = 31461;
33const char * testChannelWriteAPIKey = "LD79EOAAWRVYF04Y";
34
35#define WRITE_DELAY_FOR_THINGSPEAK 15000
36
37test(setFieldCase)
38{
39 // Always wait to ensure that rate limit isn't hit
40 delay(WRITE_DELAY_FOR_THINGSPEAK);
41
42 // No fields set
43 assertEqual(ERR_SETFIELD_NOT_CALLED, ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
44
45 // Test basic multi-field write
46 assertEqual(OK_SUCCESS,ThingSpeak.setField(1,(float)3.14159)); // float
47 assertEqual(OK_SUCCESS,ThingSpeak.setField(2,-47)); // integer
48 assertEqual(OK_SUCCESS,ThingSpeak.setField(3,(long)100000L)); // long
49 assertEqual(OK_SUCCESS,ThingSpeak.setField(4,(float)NAN)); // Nan
50 assertEqual(OK_SUCCESS,ThingSpeak.setField(5,"foobar")); // string
51 assertEqual(OK_SUCCESS,ThingSpeak.setField(6,(float)INFINITY)); // + inf
52 assertEqual(OK_SUCCESS,ThingSpeak.setField(7,(float)-INFINITY)); // + inf
53 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
54
55 // Test write when not enough time has elapsed
56 assertEqual(OK_SUCCESS,ThingSpeak.setField(1,(float)3.14159)); // float
57 assertEqual(ERR_NOT_INSERTED,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
58
59 // Allow enough time to pass to make sure that it would work
60 delay(WRITE_DELAY_FOR_THINGSPEAK);
61
62 // Test write to field out of range
63 assertEqual(ERR_INVALID_FIELD_NUM,ThingSpeak.setField(0,(float)3.14159));
64 assertEqual(ERR_INVALID_FIELD_NUM,ThingSpeak.setField(9,(float)3.14159));
65}
66
67#ifdef ARDUINO_AVR_MEGA2560 // Only the mega has enough memory for all these tests
68test(setFieldFloatCase)
69{
70 // Always wait to ensure that rate limit isn't hit
71 delay(WRITE_DELAY_FOR_THINGSPEAK);
72
73 // Test max range values
74 assertEqual(OK_SUCCESS, ThingSpeak.setField(1, (float)-999999000000));
75 assertEqual(OK_SUCCESS, ThingSpeak.setField(2, (float)999999000000));
76
77 // Test high precision values
78 assertEqual(OK_SUCCESS, ThingSpeak.setField(3, (float)3.14159));
79 assertEqual(OK_SUCCESS, ThingSpeak.setField(4, (float)-3.14159));
80
81 // Test passing NaN and Inf
82 assertEqual(OK_SUCCESS, ThingSpeak.setField(5, (float)NAN));
83 assertEqual(OK_SUCCESS, ThingSpeak.setField(6, (float)INFINITY));
84 assertEqual(OK_SUCCESS, ThingSpeak.setField(7, (float)-INFINITY));
85
86 // Test out of range values
87 assertEqual(ERR_OUT_OF_RANGE, ThingSpeak.setField(8, (float)-1000000000000.0));
88 assertEqual(ERR_OUT_OF_RANGE, ThingSpeak.setField(8, (float)1000000000000.0));
89
90 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
91}
92
93test(setFieldIntCase)
94{
95 // Always wait to ensure that rate limit isn't hit
96 delay(WRITE_DELAY_FOR_THINGSPEAK);
97
98 // Test max range values
99 assertEqual(OK_SUCCESS, ThingSpeak.setField(1, (int)-32768));
100 assertEqual(OK_SUCCESS, ThingSpeak.setField(2, (int)32767));
101
102 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
103}
104
105test(setFieldLongCase)
106{
107 // Always wait to ensure that rate limit isn't hit
108 delay(WRITE_DELAY_FOR_THINGSPEAK);
109
110 // Test max range values
111 assertEqual(OK_SUCCESS, ThingSpeak.setField(1, (long)-2147483648L));
112 assertEqual(OK_SUCCESS, ThingSpeak.setField(2, (long)2147483647L));
113
114 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
115}
116
117test(setFieldCharStarCase)
118{
119 // Always wait to ensure that rate limit isn't hit
120 delay(WRITE_DELAY_FOR_THINGSPEAK);
121
122 // Test empty string
123 assertEqual(OK_SUCCESS, ThingSpeak.setField(1, ""));
124
125 char longString[300];
126
127 // Test max string
128 memset(longString, '0',255);
129 longString[255] = 0;
130 assertEqual(OK_SUCCESS, ThingSpeak.setField(2, longString));
131
132 // Test long string
133 memset(longString, '0',sizeof(longString)/sizeof(longString[0]) - 1);
134 longString[sizeof(longString)] = 0;
135
136 assertEqual(ERR_OUT_OF_RANGE, ThingSpeak.setField(3, longString));
137
138 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
139}
140
141test(setFieldStringCase)
142{
143 // Always wait to ensure that rate limit isn't hit
144 delay(WRITE_DELAY_FOR_THINGSPEAK);
145
146 // Test empty string
147 assertEqual(OK_SUCCESS, ThingSpeak.setField(1, String()));
148
149 unsigned int numChar = 300;
150 String longString;
151 longString.reserve(numChar);
152
153 // Test max string
154 for(unsigned int i = 0; i < 255; i++)
155 {
156 longString += '0';
157 }
158 assertEqual(OK_SUCCESS, ThingSpeak.setField(2, longString));
159
160 // Test long string
161 longString.reserve(numChar);
162 for(unsigned int i = 0; i < numChar; i++)
163 {
164 longString += '0';
165 }
166
167 assertEqual(ERR_OUT_OF_RANGE, ThingSpeak.setField(3, longString));
168
169 assertEqual(OK_SUCCESS,ThingSpeak.writeFields(testChannelNumber, testChannelWriteAPIKey));
170}
171#endif // Mega only tests
172
173void setup()
174{
175 Serial.begin(9600);
176 while(!Serial); // for the Arduino Leonardo/Micro only
177 #ifdef ARDUINO_AVR_YUN
178 Bridge.begin();
179 #else
180 Ethernet.begin(mac);
181 #endif
182 ThingSpeak.begin(client);
183}
184
185void loop()
186{
187 Test::run();
188}
189
Note: See TracBrowser for help on using the repository browser.