Selaa lähdekoodia

Rearrange tests

Signed-off-by: James Noss <james.noss@lexisnexis.com>
James Noss 9 vuotta sitten
vanhempi
commit
b0568aa39c

+ 33 - 0
testing/regress/ecl/key/rediserrortests.xml

@@ -0,0 +1,33 @@
+<Dataset name='Result 1'>
+ <Row><value>Auth Failed</value></Row>
+</Dataset>
+<Dataset name='Result 2'>
+ <Row><value>Redis Plugin: ERROR - the requested key &apos;authTest1&apos; does not exist on database 0 on 127.0.0.1:6379</value></Row>
+</Dataset>
+<Dataset name='Result 3'>
+ <Row><value>Redis Plugin: ERROR - connection for 127.0.0.1:9999 failed : Connection refused</value></Row>
+</Dataset>
+<Dataset name='Result 4'>
+ <Row><value>Redis Plugin: ERROR - unsupported option string &apos;blahblahblah&apos;</value></Row>
+</Dataset>
+<Dataset name='Result 5'>
+ <Row><value>Redis Plugin: ERROR - SELECT 16 on database 0 for 127.0.0.1:6379 failed : ERR invalid DB index</value></Row>
+</Dataset>
+<Dataset name='Result 6'>
+ <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;channelTest1&apos; on database 0 for 127.0.0.1:6379 failed : key locked with a channel (&apos;redis_ecl_lock_blah_blah_blah&apos;) different to that subscribed to (redis_ecl_lock_channelTest1_0).</value></Row>
+</Dataset>
+<Dataset name='Result 7'>
+ <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;channelTest2&apos; on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable</value></Row>
+</Dataset>
+<Dataset name='Result 8'>
+ <Row><Result_8></Result_8></Row>
+</Dataset>
+<Dataset name='Result 9'>
+ <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;timeoutTest1&apos; on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable</value></Row>
+</Dataset>
+<Dataset name='Result 10'>
+ <Row><Result_10></Result_10></Row>
+</Dataset>
+<Dataset name='Result 11'>
+ <Row><value>Timed Out</value></Row>
+</Dataset>

+ 6 - 24
testing/regress/ecl/key/redislockingtest.xml

@@ -71,10 +71,10 @@
  <Row><Result_24>false</Result_24></Row>
 </Dataset>
 <Dataset name='Result 25'>
- <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;channelTest1&apos; on database 0 for 127.0.0.1:6379 failed : key locked with a channel (&apos;redis_ecl_lock_blah_blah_blah&apos;) different to that subscribed to (redis_ecl_lock_channelTest1_0).</value></Row>
+ <Row><Result_25>databaseThenExpire</Result_25></Row>
 </Dataset>
 <Dataset name='Result 26'>
- <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;channelTest2&apos; on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable</value></Row>
+ <Row><Result_26>databaseThenExpire</Result_26></Row>
 </Dataset>
 <Dataset name='Result 27'>
  <Row><Result_27>databaseThenExpire</Result_27></Row>
@@ -98,10 +98,10 @@
  <Row><Result_33>databaseThenExpire</Result_33></Row>
 </Dataset>
 <Dataset name='Result 34'>
- <Row><Result_34>databaseThenExpire</Result_34></Row>
+ <Row><Result_34>Good boy Einnie!</Result_34></Row>
 </Dataset>
 <Dataset name='Result 35'>
- <Row><Result_35>databaseThenExpire</Result_35></Row>
+ <Row><Result_35>Good boy Einnie!</Result_35></Row>
 </Dataset>
 <Dataset name='Result 36'>
  <Row><Result_36>Good boy Einnie!</Result_36></Row>
@@ -110,10 +110,10 @@
  <Row><Result_37>Good boy Einnie!</Result_37></Row>
 </Dataset>
 <Dataset name='Result 38'>
- <Row><Result_38>Good boy Einnie!</Result_38></Row>
+ <Row><Result_38>supercalifragilisticexpialidocious</Result_38></Row>
 </Dataset>
 <Dataset name='Result 39'>
- <Row><Result_39>Good boy Einnie!</Result_39></Row>
+ <Row><Result_39>supercalifragilisticexpialidocious</Result_39></Row>
 </Dataset>
 <Dataset name='Result 40'>
  <Row><Result_40>supercalifragilisticexpialidocious</Result_40></Row>
@@ -121,21 +121,3 @@
 <Dataset name='Result 41'>
  <Row><Result_41>supercalifragilisticexpialidocious</Result_41></Row>
 </Dataset>
-<Dataset name='Result 42'>
- <Row><Result_42>supercalifragilisticexpialidocious</Result_42></Row>
-</Dataset>
-<Dataset name='Result 43'>
- <Row><Result_43>supercalifragilisticexpialidocious</Result_43></Row>
-</Dataset>
-<Dataset name='Result 44'>
- <Row><Result_44></Result_44></Row>
-</Dataset>
-<Dataset name='Result 45'>
- <Row><value>Redis Plugin: ERROR - GetOrLock&lt;type&gt; &apos;timeoutTest1&apos; on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable</value></Row>
-</Dataset>
-<Dataset name='Result 46'>
- <Row><Result_46></Result_46></Row>
-</Dataset>
-<Dataset name='Result 47'>
- <Row><value>Timed Out</value></Row>
-</Dataset>

+ 2 - 14
testing/regress/ecl/key/redissynctest.xml

@@ -89,20 +89,8 @@
  <Row><Result_30>300</Result_30></Row>
 </Dataset>
 <Dataset name='Result 31'>
- <Row><value>Auth Failed</value></Row>
+ <Row><Result_31>2000</Result_31></Row>
 </Dataset>
 <Dataset name='Result 32'>
- <Row><value>Redis Plugin: ERROR - the requested key &apos;authTest1&apos; does not exist on database 0 on 127.0.0.1:6379</value></Row>
-</Dataset>
-<Dataset name='Result 33'>
- <Row><value>Redis Plugin: ERROR - connection for 127.0.0.1:9999 failed : Connection refused</value></Row>
-</Dataset>
-<Dataset name='Result 34'>
- <Row><value>Redis Plugin: ERROR - unsupported option string &apos;blahblahblah&apos;</value></Row>
-</Dataset>
-<Dataset name='Result 35'>
- <Row><value>Redis Plugin: ERROR - SELECT 16 on database 0 for 127.0.0.1:6379 failed : ERR invalid DB index</value></Row>
-</Dataset>
-<Dataset name='Result 36'>
- <Row><Result_36>2000</Result_36></Row>
+ <Row><Result_32>OK</Result_32></Row>
 </Dataset>

+ 123 - 0
testing/regress/ecl/rediserrortests.ecl

@@ -0,0 +1,123 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2015 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+//class=embedded
+//class=3rdparty
+
+//nothor
+
+IMPORT * FROM lib_redis;
+IMPORT Std;
+
+STRING server := '--SERVER=127.0.0.1:6379';
+STRING password := 'foobared';
+redis.FlushDB(server, /*database*/, password);
+myRedis := redisServer(server, password);
+
+myFuncStr(STRING key) := FUNCTION
+ value := myRedis.GetString(key);
+ return value;
+END;
+myFuncUtf8(STRING key) := FUNCTION
+ value := myRedis.GetUtf8(key);
+ return value;
+END;
+myFuncUni(STRING key) := FUNCTION
+ value := myRedis.GetUnicode(key);
+ return value;
+END;
+
+getString(STRING key, STRING key2, myFuncStr func) := FUNCTION
+    value := myRedis.GetOrLockString(key);
+    RETURN IF (LENGTH(value) = 0, myRedis.SetAndPublishString(key, func(key2)), value);
+END;
+getUtf8(STRING key, STRING key2, myFuncUtf8 func) := FUNCTION
+    value := myRedis.GetOrLockUtf8(key);
+    RETURN IF (LENGTH(value) = 0, myRedis.SetAndPublishUtf8(key, func(key2)), value);
+END;
+getUnicode(STRING key, STRING key2, myFuncUni func) := FUNCTION
+    value := myRedis.GetOrLockUnicode(key);
+    RETURN IF (LENGTH(value) = 0, myRedis.SetAndPublishUnicode(key, func(key2)), value);
+END;
+
+//Test some exceptions
+myRedis4 := RedisServer(server);
+STRING noauth := 'Redis Plugin: ERROR - authentication for 127.0.0.1:6379 failed : NOAUTH Authentication required.';
+STRING opNotPerm :=  'Redis Plugin: ERROR - authentication for 127.0.0.1:6379 failed : ERR operation not permitted';
+ds1 := DATASET(NOFOLD(1), TRANSFORM({STRING value}, SELF.value := myRedis4.GetString('authTest' + (STRING)COUNTER)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    OUTPUT(CATCH(ds1, ONFAIL(TRANSFORM({ STRING value }, SELF.value := IF(FAILMESSAGE = noauth OR FAILMESSAGE = opNotPerm, 'Auth Failed', 'Unexpected Error - ' + FAILMESSAGE)))));
+    );
+
+ds2 := DATASET(NOFOLD(1), TRANSFORM({STRING value}, SELF.value := myRedis.GetString('authTest' + (STRING)COUNTER)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    OUTPUT(CATCH(ds2, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+myRedis5 := RedisServer('--SERVER=127.0.0.1:9999');
+ds3 := DATASET(NOFOLD(1), TRANSFORM({STRING value}, SELF.value := myRedis5.GetString('connectTest' + (STRING)COUNTER)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    OUTPUT(CATCH(ds3, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+ds4 := DATASET(NOFOLD(1), TRANSFORM({STRING value}, SELF.value := redis.GetString('option' + (STRING)COUNTER, 'blahblahblah')));
+SEQUENTIAL(
+    OUTPUT(CATCH(ds4, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+ds5 := DATASET(NOFOLD(1), TRANSFORM({STRING value}, SELF.value := myRedis.GetString('maxDB' + (STRING)COUNTER, 16)));
+SEQUENTIAL(
+    OUTPUT(CATCH(ds5, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+//Test exception for checking expected channels
+ds6 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetOrLockString('channelTest' + (string)COUNTER)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    myRedis.SetString('channelTest1', 'redis_ecl_lock_blah_blah_blah');
+    OUTPUT(CATCH(ds6, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+ds7 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetOrLockString('channelTest' + (string)(1+COUNTER))));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    myRedis.SetString('channelTest2', 'redis_ecl_lock_channelTest2_0');
+    OUTPUT(CATCH(ds7, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+//Test timeout
+myRedisNoTO := redisServerWithoutTimeout(server, password);
+dsTO := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedisNoTO.GetOrLockString('timeoutTest' + (string)COUNTER,,,1000)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    myRedis.GetOrLockString('timeoutTest1');
+    OUTPUT(CATCH(dsTO, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
+    );
+
+STRING pluginTO := 'Redis Plugin: ERROR - function timed out internally.';
+STRING redisTO := 'Redis Plugin: ERROR - GetOrLock<type> \'timeoutTest2\' on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable';
+dsTO2 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := redis.GetOrLockString('timeoutTest' + (string)(1+COUNTER), server, /*database*/, password, 1/*ms*/)));
+SEQUENTIAL(
+    myRedis.FlushDB();
+    myRedis.GetOrLockString('timeoutTest2');
+    OUTPUT(CATCH(dsTO2, ONFAIL(TRANSFORM({ STRING value }, SELF.value := IF(FAILMESSAGE = pluginTO OR FAILMESSAGE = redisTO, 'Timed Out', 'Unexpected Error - ' + FAILMESSAGE)))));
+    );
+
+myRedis.FlushDB();

+ 1 - 34
testing/regress/ecl/redislockingtest.ecl

@@ -18,7 +18,7 @@
 //class=embedded
 //class=3rdparty
 
-//nothor
+//nohthor
 
 IMPORT * FROM lib_redis;
 IMPORT Std;
@@ -126,21 +126,6 @@ SEQUENTIAL(
     myRedis.FlushDB(),
     );
 
-//Test exception for checking expected channels
-ds1 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetOrLockString('channelTest' + (string)COUNTER)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    myRedis.SetString('channelTest1', 'redis_ecl_lock_blah_blah_blah');
-    OUTPUT(CATCH(ds1, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
-ds2 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetOrLockString('channelTest' + (string)(1+COUNTER))));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    myRedis.SetString('channelTest2', 'redis_ecl_lock_channelTest2_0');
-    OUTPUT(CATCH(ds2, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
 SEQUENTIAL(
     myRedis.FlushDB(1);
     myRedis.SetAndPublishString('testDatabaseExpire1', 'databaseThenExpire', 1, 10000);
@@ -183,22 +168,4 @@ SEQUENTIAL(
     myRedis.FlushDB(1);
     );
 
-//Test timeout
-myRedisNoTO := redisServerWithoutTimeout(server, password);
-dsTO := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedisNoTO.GetOrLockString('timeoutTest' + (string)COUNTER,,,1000)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    myRedis.GetOrLockString('timeoutTest1');
-    OUTPUT(CATCH(dsTO, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
-STRING pluginTO := 'Redis Plugin: ERROR - function timed out internally.';
-STRING redisTO := 'Redis Plugin: ERROR - GetOrLock<type> \'timeoutTest2\' on database 0 for 127.0.0.1:6379 failed : Resource temporarily unavailable';
-dsTO2 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := redis.GetOrLockString('timeoutTest' + (string)(1+COUNTER), server, /*database*/, password, 1/*ms*/)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    myRedis.GetOrLockString('timeoutTest2');
-    OUTPUT(CATCH(dsTO2, ONFAIL(TRANSFORM({ STRING value }, SELF.value := IF(FAILMESSAGE = pluginTO OR FAILMESSAGE = redisTO, 'Timed Out', 'Unexpected Error - ' + FAILMESSAGE)))));
-    );
-
 myRedis.FlushDB();

+ 21 - 39
testing/regress/ecl/redissynctest.ecl

@@ -18,7 +18,7 @@
 //class=embedded
 //class=3rdparty
 
-//nothor
+//nohthor
 
 IMPORT redis FROM lib_redis;
 IMPORT Std;
@@ -160,52 +160,34 @@ SEQUENTIAL(
     OUTPUT(SUM(NOFOLD(s1 + s2), a))//answer = (x+x/2)*N, in this case 300.
     );
 
-//Test some exceptions
-myRedis4 := RedisServer(server);
-STRING noauth := 'Redis Plugin: ERROR - authentication for 127.0.0.1:6379 failed : NOAUTH Authentication required.';
-STRING opNotPerm :=  'Redis Plugin: ERROR - authentication for 127.0.0.1:6379 failed : ERR operation not permitted';
-ds1 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis4.GetString('authTest' + (string)COUNTER)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    OUTPUT(CATCH(ds1, ONFAIL(TRANSFORM({ STRING value }, SELF.value := IF(FAILMESSAGE = noauth OR FAILMESSAGE = opNotPerm, 'Auth Failed', 'Unexpected Error - ' + FAILMESSAGE)))));
-    );
-
-ds2 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetString('authTest' + (string)COUNTER)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    OUTPUT(CATCH(ds2, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
-myRedis5 := RedisServer('--SERVER=127.0.0.1:9999');
-ds3 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis5.GetString('connectTest' + (string)COUNTER)));
-SEQUENTIAL(
-    myRedis.FlushDB();
-    OUTPUT(CATCH(ds3, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
-ds4 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := redis.GetString('option' + (string)COUNTER, 'blahblahblah')));
-SEQUENTIAL(
-    OUTPUT(CATCH(ds4, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
-ds5 := DATASET(NOFOLD(1), TRANSFORM({string value}, SELF.value := myRedis.GetString('maxDB' + (string)COUNTER, 16)));
-SEQUENTIAL(
-    OUTPUT(CATCH(ds5, ONFAIL(TRANSFORM({ STRING value }, SELF.value := FAILMESSAGE))));
-    );
-
 //Test Publish and Subscribe
 //SUM(NOFOLD(s1 + s2), a) uses two threads - this test relies on this fact to work!
+INTEGER N2 := 1000;
+subDS := DATASET(N2, TRANSFORM({ integer a }, SELF.a := (INTEGER)myRedis.Subscribe('PubSubTest' + (STRING)COUNTER)));
+
 INTEGER pub(STRING channel) := FUNCTION
         sl := Std.System.Debug.Sleep(2);
         value :=  myRedis.Publish(channel, '1');
      RETURN WHEN(value, sl, BEFORE);
 END;
-
-INTEGER N2 := 1000;
-myRedis.FlushDB();
-subDS := DATASET(N2, TRANSFORM({ integer a }, SELF.a := (INTEGER)myRedis.Subscribe('PubSubTest' + (STRING)COUNTER)));
 pubDS := DATASET(N2, TRANSFORM({ integer a }, SELF.a := pub('PubSubTest' + (STRING)COUNTER)));
-OUTPUT(SUM(NOFOLD(subDS + pubDS), a));//answer = N*2 = 2000
+
+INTEGER pub2(STRING channel) := FUNCTION
+        sl := SEQUENTIAL(
+            Std.System.Debug.Sleep(2),
+            myRedis.Publish(channel, '3')//This pub is the one read by the sub.
+            );
+        value :=  myRedis.Publish(channel, '10000');//This pub isn't read by the sub, however the returned subscription count is present in the sum
+     RETURN WHEN(value, sl, BEFORE);
+END;
+pubDS2 := DATASET(N2, TRANSFORM({ integer a }, SELF.a := pub2('PubSubTest' + (STRING)COUNTER)));
+
+value := SUM(NOFOLD(subDS + pubDS2), a);
+SEQUENTIAL(
+    OUTPUT(SUM(NOFOLD(subDS + pubDS), a));//answer = N*2 = 2000
+    OUTPUT( IF (value > N2*4, (STRING)value, 'OK'));//ideally result = N*3, less than this => not all subs had pubs (but this would cause a timeout).
+    );
+    // N*3 > result < N*4 => all subs received a pub, however, there were result-N*3 subs still open for the second pub. result > N*4 => gremlins.
 
 myRedis.FlushDB();
 myRedis2.FlushDB();