github.com/orofarne/hammy@v0.0.0-20130409105742-374fadfd6ecb/worker/tests/mozjs_test.cc (about)

     1  #include <time.h>
     2  #include <gtest/gtest.h>
     3  
     4  #include "../eval.hh"
     5  
     6  #include <js/jsvalue.h>
     7  
     8  #define TIME_X 1364931158
     9  
    10  TEST(MozJsTest, SimpleScript) {
    11  	hammy::MozJSEval eval;
    12  	hammy::State s;
    13  	EXPECT_EQ(0, eval.init());
    14  	ASSERT_EQ(0, eval.set_hostname("test", 4));
    15  	ASSERT_EQ(0, eval.set_key("mykey", 5));
    16  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
    17  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
    18  	eval.set_state(&s);
    19  	const char *script = "var x = 2 + 2;\n";
    20  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
    21  	EXPECT_EQ(0, eval.exec());
    22  	EXPECT_EQ("", eval.last_error());
    23  }
    24  
    25  TEST(MozJsTest, SimpleBadScript) {
    26  	hammy::MozJSEval eval;
    27  	hammy::State s;
    28  	EXPECT_EQ(0, eval.init());
    29  	ASSERT_EQ(0, eval.set_hostname("test", 4));
    30  	ASSERT_EQ(0, eval.set_key("mykey", 5));
    31  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
    32  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
    33  	eval.set_state(&s);
    34  	EXPECT_EQ("", eval.last_error());
    35  	const char *script = "var x 2 + 2;\n";
    36  	EXPECT_NE(0, eval.compile(script, strlen(script)));
    37  	EXPECT_NE("", eval.last_error());
    38  }
    39  
    40  TEST(MozJsTest, BadAndGood) {
    41  	hammy::MozJSEval eval;
    42  	hammy::State s;
    43  	EXPECT_EQ(0, eval.init());
    44  	ASSERT_EQ(0, eval.set_hostname("test", 4));
    45  	ASSERT_EQ(0, eval.set_key("mykey", 5));
    46  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
    47  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
    48  	eval.set_state(&s);
    49  
    50  	const char *script = "var x 2 + 2;\n";
    51  	EXPECT_NE(0, eval.compile(script, strlen(script)));
    52  	EXPECT_NE("", eval.last_error());
    53  
    54  	const char *script2 = "var x = 2 + 2;\n";
    55  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
    56  	EXPECT_EQ("", eval.last_error());
    57  	EXPECT_EQ(0, eval.exec());
    58  	EXPECT_EQ("", eval.last_error());
    59  }
    60  
    61  TEST(MozJsTest, Cmd) {
    62  	hammy::MozJSEval eval;
    63  	hammy::State s;
    64  	EXPECT_EQ(0, eval.init());
    65  	ASSERT_EQ(0, eval.set_hostname("test", 4));
    66  	ASSERT_EQ(0, eval.set_key("mykey", 5));
    67  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
    68  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
    69  	eval.set_state(&s);
    70  
    71  	const char *script = "cmd('log');\n";
    72  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
    73  	EXPECT_EQ(0, eval.exec());
    74  	EXPECT_EQ("", eval.last_error());
    75  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
    76  	ASSERT_EQ(1, cmdb.size());
    77  	EXPECT_EQ("log", cmdb[0].cmd);
    78  	EXPECT_EQ(0, cmdb[0].opts.size());
    79  
    80  	const char *script2 = "cmd('log', {'message': 'hello'});\n";
    81  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
    82  	EXPECT_EQ(0, eval.exec());
    83  	EXPECT_EQ("", eval.last_error());
    84  	hammy::CmdBuf &cmdb2 = eval.get_cmdbuf();
    85  	ASSERT_EQ(1, cmdb2.size());
    86  	EXPECT_EQ("log", cmdb2[0].cmd);
    87  	ASSERT_EQ(1, cmdb2[0].opts.size());
    88  	EXPECT_TRUE(cmdb2[0].opts["message"].isString());
    89  }
    90  
    91  TEST(MozJsTest, Hostname) {
    92  	hammy::MozJSEval eval;
    93  	hammy::State s;
    94  	EXPECT_EQ(0, eval.init());
    95  	ASSERT_EQ(0, eval.set_hostname("test", 4));
    96  	ASSERT_EQ(0, eval.set_key("mykey", 5));
    97  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
    98  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
    99  	eval.set_state(&s);
   100  	const char *script = "cmd('log', {'message': host});\n";
   101  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   102  	EXPECT_EQ(0, eval.exec());
   103  	EXPECT_EQ("", eval.last_error());
   104  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   105  	ASSERT_EQ(1, cmdb.size());
   106  	EXPECT_EQ("log", cmdb[0].cmd);
   107  	ASSERT_EQ(1, cmdb[0].opts.size());
   108  	EXPECT_TRUE(cmdb[0].opts["message"].isString());
   109  
   110  	ASSERT_EQ(0, eval.set_hostname("test2", 5));
   111  	const char *script2 = "host = 'foo'; if(host === 'test2'){cmd('log');}\n";
   112  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
   113  	EXPECT_EQ(0, cmdb.size());
   114  	EXPECT_EQ(0, eval.exec());
   115  	EXPECT_EQ(1, cmdb.size());
   116  }
   117  
   118  TEST(MozJsTest, Key) {
   119  	hammy::MozJSEval eval;
   120  	hammy::State s;
   121  	EXPECT_EQ(0, eval.init());
   122  	ASSERT_EQ(0, eval.set_hostname("test", 4));
   123  	ASSERT_EQ(0, eval.set_key("mykey", 5));
   124  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
   125  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
   126  	eval.set_state(&s);
   127  	const char *script = "cmd('log', {'message': key});\n";
   128  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   129  	EXPECT_EQ(0, eval.exec());
   130  	EXPECT_EQ("", eval.last_error());
   131  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   132  	ASSERT_EQ(1, cmdb.size());
   133  	EXPECT_EQ("log", cmdb[0].cmd);
   134  	ASSERT_EQ(1, cmdb[0].opts.size());
   135  	EXPECT_TRUE(cmdb[0].opts["message"].isString());
   136  
   137  	ASSERT_EQ(0, eval.set_key("k2", 2));
   138  
   139  	ASSERT_EQ(0, eval.set_key("test2", 5));
   140  	const char *script2 = "key = 'foo'; if(key === 'test2'){cmd('log');}\n";
   141  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
   142  	EXPECT_EQ(0, cmdb.size());
   143  	EXPECT_EQ(0, eval.exec());
   144  	EXPECT_EQ(1, cmdb.size());
   145  }
   146  
   147  TEST(MozJsTest, Timestamp) {
   148  	hammy::MozJSEval eval;
   149  	hammy::State s;
   150  	EXPECT_EQ(0, eval.init());
   151  	ASSERT_EQ(0, eval.set_hostname("test", 4));
   152  	ASSERT_EQ(0, eval.set_key("mykey", 5));
   153  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
   154  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
   155  	eval.set_state(&s);
   156  	const char *script = "cmd('log', {'message': timestamp.toString()});\n";
   157  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   158  	EXPECT_EQ(0, eval.exec());
   159  	EXPECT_EQ("", eval.last_error());
   160  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   161  	ASSERT_EQ(1, cmdb.size());
   162  	EXPECT_EQ("log", cmdb[0].cmd);
   163  	ASSERT_EQ(1, cmdb[0].opts.size());
   164  	EXPECT_TRUE(cmdb[0].opts["message"].isString());
   165  
   166  	ASSERT_EQ(0, eval.set_timestamp(TIME_X + 10));
   167  	const char *script2 = "timestamp = 103; if(timestamp == 103){cmd('log');}\n";
   168  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
   169  	EXPECT_EQ(0, cmdb.size());
   170  	EXPECT_EQ(0, eval.exec());
   171  	EXPECT_EQ(0, cmdb.size());
   172  }
   173  
   174  TEST(MozJsTest, Value) {
   175  	hammy::MozJSEval eval;
   176  	hammy::State s;
   177  	EXPECT_EQ(0, eval.init());
   178  	ASSERT_EQ(0, eval.set_hostname("test", 4));
   179  	ASSERT_EQ(0, eval.set_key("mykey", 5));
   180  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
   181  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
   182  	eval.set_state(&s);
   183  	const char *script = "cmd('log', {'message': value});\n";
   184  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   185  	EXPECT_EQ(0, eval.exec());
   186  	EXPECT_EQ("", eval.last_error());
   187  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   188  	ASSERT_EQ(1, cmdb.size());
   189  	EXPECT_EQ("log", cmdb[0].cmd);
   190  	ASSERT_EQ(1, cmdb[0].opts.size());
   191  	EXPECT_TRUE(cmdb[0].opts["message"].isDouble());
   192  
   193  	JSString *str = JS_NewStringCopyZ(eval.context(), "hello");
   194  	ASSERT_EQ(0, eval.set_value(js::Valueify(STRING_TO_JSVAL(str))));
   195  	const char *script2 = "value = 103; if(value === 'hello'){cmd('log');}\n";
   196  	EXPECT_EQ(0, eval.compile(script2, strlen(script2)));
   197  	EXPECT_EQ(0, cmdb.size());
   198  	EXPECT_EQ(0, eval.exec());
   199  	EXPECT_EQ(1, cmdb.size());
   200  
   201  }
   202  
   203  TEST(MozJsTest, StateSetGet) {
   204  	hammy::MozJSEval eval;
   205  	hammy::State s;
   206  	EXPECT_EQ(0, eval.init());
   207  	ASSERT_EQ(0, eval.set_hostname("test", 4));
   208  	ASSERT_EQ(0, eval.set_key("mykey", 5));
   209  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
   210  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
   211  	eval.set_state(&s);
   212  
   213  	const char *script =
   214  		"var x = 10;\n"
   215  		"set_state('x', x);\n"
   216  		"if(x === get_state('x')) {\n"
   217  		"    cmd('log', {'message': 'x_ok'});\n"
   218  		"}\n"
   219  		"var y = 'hello';\n"
   220  		"set_state('y', y);\n"
   221  		"if(y === get_state('y')) {\n"
   222  		"    cmd('log', {'message': 'y_ok'});\n"
   223  		"}\n"
   224  		"var s = get_state_ext('y');\n"
   225  		"if(s != null) {\n"
   226  		"    cmd('log', {'message': s.value.substr(0, 2)});\n"
   227  		"    cmd('log', {'message': s.lastUpdate.toString()});\n"
   228  		"}\n"
   229  		"var z = 3.1415;"
   230  		"if(z === get_state('z')) {\n"
   231  		"    cmd('log', {'message': 'z_ok'});\n"
   232  		"}\n";
   233  
   234  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   235  	EXPECT_EQ("", eval.last_error());
   236  	EXPECT_EQ(0, eval.exec());
   237  	EXPECT_EQ("", eval.last_error());
   238  
   239  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   240  	EXPECT_EQ(4, cmdb.size());
   241  	EXPECT_EQ(2, s.size());
   242  }
   243  
   244  TEST(MozJsTest, StateKeys) {
   245  	hammy::MozJSEval eval;
   246  	hammy::State s;
   247  	EXPECT_EQ(0, eval.init());
   248  	ASSERT_EQ(0, eval.set_hostname("test", 4));
   249  	ASSERT_EQ(0, eval.set_key("mykey", 5));
   250  	ASSERT_EQ(0, eval.set_timestamp(TIME_X));
   251  	ASSERT_EQ(0, eval.set_value(js::DoubleValue(3.1415)));
   252  	eval.set_state(&s);
   253  
   254  	const char *script =
   255  		"set_state('foo', 10);\n"
   256  		"set_state('bar', 'hello');\n"
   257  		"set_state('bazz', 3.1415);\n"
   258  		"var keys = state_keys();\n"
   259  		"for(var k in keys) {\n"
   260  		"    cmd('log');\n"
   261  		"}\n"
   262  		"var keys2 = state_keys('ba');\n"
   263  		"for(var k in keys2) {\n"
   264  		"    cmd('log');\n"
   265  		"}\n"
   266  		;
   267  
   268  	EXPECT_EQ(0, eval.compile(script, strlen(script)));
   269  	EXPECT_EQ("", eval.last_error());
   270  	EXPECT_EQ(0, eval.exec());
   271  	EXPECT_EQ("", eval.last_error());
   272  
   273  	hammy::CmdBuf &cmdb = eval.get_cmdbuf();
   274  	EXPECT_EQ(5, cmdb.size());
   275  	EXPECT_EQ(3, s.size());
   276  }