def test_04_statprefix_obj(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test object stats to the collector and checks if they can be accessed from QE, using prefix-suffix indexes ''' logging.info("*** test_04_statprefix_obj ***") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.redis_port, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_obj_stat("t010", "lxxx", "samp1", 1, 1) generator_obj.send_test_obj_stat("t010", "lyyy", "samp1", 2, 2) generator_obj.send_test_obj_stat("t010", "lyyy", "samp3", 2, 2, "", 5) generator_obj.send_test_obj_stat("t011", "lyyy", "samp2", 1, 1.1, "", 7) generator_obj.send_test_obj_stat("t011", "lxxx", "samp2", 2, 1.2) generator_obj.send_test_obj_stat("t011", "lxxx", "samp2", 2, 1.2, "", 9) logging.info("Checking Objectlog Stats str-str " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestObj.st", "-2m", select_fields=["UUID", "st.s1", "st.i1", "st.d1"], where_clause='name|st.s1=t010|samp1', num=2, check_rows=[{ "st.s1": "samp1", "st.i1": 2, "st.d1": 2 }, { "st.s1": "samp1", "st.i1": 1, "st.d1": 1 }]) return True
def test_03_min_max_query(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it inserts into the stat table rows and queries MAX and MIN on them ''' logging.info("*** test_03_min_max_query ***") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.redis_port, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat("t04", "lxxx", "samp1", 1, 5) generator_obj.send_test_stat("t04", "lyyy", "samp1", 4, 3.4) generator_obj.send_test_stat("t04", "lyyy", "samp1", 2, 4, "", 5) logging.info("Checking Stats " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["MAX(st.i1)", "PERCENTILES(st.i1)", "AVG(st.i1)"], where_clause='name|st.s1=t04|samp1', num=1, check_rows=[{ u'MAX(st.i1)': 4, u'PERCENTILES(st.i1)': None, u'AVG(st.i1)': 2.33333 }]) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["MIN(st.d1)", "AVG(st.d1)"], where_clause='name|st.s1=t04|samp1', num=1, check_rows=[{ u'MIN(st.d1)': 3.4, u'AVG(st.d1)': 4.13333 }]) return True
def test_00_basicsamples(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test stats to the collector and checks if they can be accessed from QE. ''' logging.info("%%% test_00_basicsamples %%%") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.redis_port, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat_dynamic("t00","samp1",1,1); generator_obj.send_test_stat_dynamic("t00","samp2",2,1.1); generator_obj.send_test_stat_dynamic("t00","samp3",1,-5062); generator_obj.send_test_stat_dynamic("t00&t01","samp1&samp2",2,1.1); generator_obj.send_test_stat_dynamic("t00>t01>","samp1&samp2",2,1.1, "&test_s2>"); logging.info("Checking Stats " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat("StatTable.TestStateDynamic.ts", "-2m", select_fields = [ "UUID", "ts.s1", "ts.i1", "ts.d1" ], where_clause = 'name="t00"', num = 3, check_rows = [{ "ts.s1":"samp2", "ts.i1":2, "ts.d1":1.1}, { "ts.s1":"samp1", "ts.i1":1, "ts.d1":1}, { "ts.s1":"samp3", "ts.i1":1, "ts.d1":-5062}]); assert generator_obj.verify_test_stat("StatTable.TestStateDynamic.ts", "-2m", select_fields = [ "UUID", "ts.s1", "ts.s2" ], where_clause = 'name="t00&t01"', num = 1, check_rows = [{ "ts.s1":"samp1&samp2", "ts.s2": "" }]) assert generator_obj.verify_test_stat("StatTable.TestStateDynamic.ts", "-2m", select_fields = [ "UUID", "name", "ts.s2" ], where_clause = 'ts.s1="samp1&samp2"', num = 2, check_rows = [{ "name":"t00&t01", "ts.s2": "" }, { "name":"t00>t01>", "ts.s2":"&test_s2>" }]) return True
def test_05_statprefix_double(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test 2nd-level stats to the collector and checks if they can be accessed from QE, using prefix-suffix indexes ''' logging.info("%%% test_05_statprefix_double %%%") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat_double("t010", "lxxx", "samp1", 1, 1) generator_obj.send_test_stat_double("t010", "lyyy", "samp1", 2, 3) generator_obj.send_test_stat_double("t010", "lyyy", "samp3", 2, 3, "misc2", 5) generator_obj.send_test_stat_double("t011", "lyyy", "samp2", 1, 1.1, "misc1", 7) generator_obj.send_test_stat_double("t011", "lxxx", "samp2", 2, 1.2) generator_obj.send_test_stat_double("t011", "lxxx", "samp2", 2, 1.2, "", 9) logging.info("Checking 2nd-level Stats str-double" + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestStateDouble.dst.st", "-2m", select_fields=["UUID", "dst.st.s1", "dst.st.i1", "dst.l1"], where_clause='dst.l1|dst.st.s2=lyyy|misc1', num=1, check_rows=[{ "dst.st.s1": "samp2", "dst.st.i1": 1, "dst.l1": "lyyy" }]) return True
def test_14_verify_qe_stats_collection(self): ''' This test checks if the QE is able to collect the stats related to DB reads correctly ''' logging.info('%%% test_14_verify_qe_stats_collection %%%') analytics = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.cassandra_port)) assert analytics.verify_on_setup() # make stat table entries also collectors = [analytics.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, analytics.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat("t010","lxxx","samp1",1,1); generator_obj.send_test_stat("t010","lyyy","samp1",2,2); assert generator_obj.verify_test_stat("StatTable.StatTestState.st","-2m", select_fields = [ "UUID", "st.s1", "st.i1", "st.d1" ], where_clause = 'name|st.s1=t010|samp1', num = 2, check_rows = [{ "st.s1":"samp1", "st.i1":2, "st.d1":2}, { "st.s1":"samp1", "st.i1":1, "st.d1":1}]); # Get the current read stats for MessageTable old_reads = analytics.get_db_read_stats_from_qe(analytics.query_engine, COLLECTOR_GLOBAL_TABLE) # read some data from message table and issue thequery again assert analytics.verify_message_table_moduleid() new_reads = analytics.get_db_read_stats_from_qe(analytics.query_engine, COLLECTOR_GLOBAL_TABLE) assert(old_reads < new_reads) # Get the current read stats for stats table old_reads = analytics.get_db_read_stats_from_qe(analytics.query_engine, 'StatTestState:st',True) assert (old_reads > 0) assert generator_obj.verify_test_stat("StatTable.StatTestState.st","-2m", select_fields = [ "UUID", "st.s1", "st.i1", "st.d1" ], where_clause = 'name|st.s1=t010|samp1', num = 2, check_rows = [{ "st.s1":"samp1", "st.i1":2, "st.d1":2}, { "st.s1":"samp1", "st.i1":1, "st.d1":1}]); new_reads = analytics.get_db_read_stats_from_qe(analytics.query_engine, 'StatTestState:st',True) assert(new_reads > old_reads)
def test_02_overflowsamples(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test stats to the collector and checks if they can be accessed from QE. ''' logging.info("*** test_02_overflowsamples ***") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.redis_port, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat_dynamic("t02", "samp02-2", 0xffffffffffffffff, 1.1) logging.info("Checking Stats " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.TestStateDynamic.ts", "-2m", select_fields=["UUID", "ts.s1", "ts.i1", "ts.d1"], where_clause='name="t02"', num=1, check_rows=[{ "ts.s1": "samp02-2", "ts.i1": 0xffffffffffffffff, "ts.d1": 1.1 }]) return True
def test_06_stats_filter(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test stats to the collector and checks if all filter operations work properly. ''' logging.info("%%% test_06_stats_filter %%%") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat("name0", "lxxx", "samp1", 10, 12) generator_obj.send_test_stat("name0", "lxxx", "samp2", 20, 12.6) generator_obj.send_test_stat("name0", "lyyy", "samp1", 500, 2.345) generator_obj.send_test_stat("name0", "lyyy", "samp2", 1000, 15.789) # verify that all the stats messages are added in the analytics db # before starting the filter tests assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=4, check_rows=[{ "l1": "lxxx", "st.s1": "samp1", "st.i1": 10, "st.d1": 12 }, { "l1": "lxxx", "st.s1": "samp2", "st.i1": 20, "st.d1": 12.6 }, { "l1": "lyyy", "st.s1": "samp1", "st.i1": 500, "st.d1": 2.345 }, { "l1": "lyyy", "st.s1": "samp2", "st.i1": 1000, "st.d1": 15.789 }]) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=2, check_rows=[{ "l1": "lxxx", "st.s1": "samp1", "st.i1": 10, "st.d1": 12 }, { "l1": "lxxx", "st.s1": "samp2", "st.i1": 20, "st.d1": 12.6 }], filt="l1 = lxxx") assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=1, check_rows=[{ "l1": "lyyy", "st.s1": "samp1", "st.i1": 500, "st.d1": 2.345 }], filt="st.i1 = 500") assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=2, check_rows=[{ "l1": "lxxx", "st.s1": "samp1", "st.i1": 10, "st.d1": 12 }, { "l1": "lxxx", "st.s1": "samp2", "st.i1": 20, "st.d1": 12.6 }], filt="st.i1 <= 400") assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=2, check_rows=[{ "l1": "lyyy", "st.s1": "samp1", "st.i1": 500, "st.d1": 2.345 }, { "l1": "lyyy", "st.s1": "samp2", "st.i1": 1000, "st.d1": 15.789 }], filt="st.i1 >= 500") assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=1, check_rows=[{ "l1": "lyyy", "st.s1": "samp1", "st.i1": 500, "st.d1": 2.345 }], filt="st.d1 <= 3") assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1", "st.s1", "st.i1", "st.d1"], where_clause='name=name0', num=2, check_rows=[{ "l1": "lxxx", "st.s1": "samp2", "st.i1": 20, "st.d1": 12.6 }, { "l1": "lyyy", "st.s1": "samp2", "st.i1": 1000, "st.d1": 15.789 }], filt="st.d1 >= 12.5")
def test_01_statprefix(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test stats to the collector and checks if they can be accessed from QE, using prefix-suffix indexes ''' logging.info("%%% test_01_statprefix %%%") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat("t010", "lxxx", "samp1", 1, 1) generator_obj.send_test_stat("t010", "lyyy", "samp1", 2, 2) generator_obj.send_test_stat("t010", "lyyy", "samp3", 2, 2, "", 5) generator_obj.send_test_stat("t010", "lyyy&", "samp3>", 2, 2, "") generator_obj.send_test_stat("t011", "lyyy", "samp2", 1, 1.1, "", 7) generator_obj.send_test_stat("t011", "lxxx", "samp2", 2, 1.2) generator_obj.send_test_stat("t011", "lxxx", "samp2", 2, 1.2, "", 9) generator_obj.send_test_stat("t010&t011", "lxxx", "samp2", 1, 1.4) generator_obj.send_test_stat("t010&t011", "lx>ly", "samp2", 1, 1.4) logging.info("Checking Stats str-str " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "st.s1", "st.i1", "st.d1"], where_clause='name|st.s1=t010|samp1', num=2, check_rows=[{ "st.s1": "samp1", "st.i1": 2, "st.d1": 2 }, { "st.s1": "samp1", "st.i1": 1, "st.d1": 1 }]) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "l1"], where_clause='name|st.s1=t010&t011|samp2 OR name|st.s1=t010|samp3>', num=3, check_rows=[{ "l1": "lxxx" }, { "l1": "lx>ly" }, { "l1": "lyyy&" }]) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["UUID", "st.s1", "st.i1", "st.d1"], where_clause='st.i1|st.i2=2|1<6', num=1, check_rows=[{ "st.s1": "samp3", "st.i1": 2, "st.d1": 2 }]) logging.info("Checking CLASS " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestState.st", "-2m", select_fields=["T", "name", "l1", "CLASS(T)"], where_clause='name=*', num=9, check_uniq={"CLASS(T)": 7}) return True
def test_07_container_samples(self): ''' This test starts redis,vizd,opserver and qed It uses the test class' cassandra instance Then it sends test stats to the collector and checks if they can be accessed from QE. ''' logging.info("%%% test_07_container_samples %%%") if StatsTest._check_skip_test() is True: return True vizd_obj = self.useFixture( AnalyticsFixture(logging, builddir, self.__class__.cassandra_port)) assert vizd_obj.verify_on_setup() assert vizd_obj.verify_collector_obj_count() collectors = [vizd_obj.get_collector()] generator_obj = self.useFixture( StatsFixture("VRouterAgent", collectors, logging, vizd_obj.get_opserver_port())) assert generator_obj.verify_on_setup() logging.info("Starting stat gen " + str(UTCTimestampUsec())) generator_obj.send_test_stat_container("t07", "samp1", { "me1": "val1", "me2": "val2" }, ["le1", "le2"], ["se1", "se2"], 2) generator_obj.send_test_stat_container("t07", "samp1", { "me1": "val2", "me3": "val3" }, ["le1", "le2", "le4"], ["se3", "se4"], 2) generator_obj.send_test_stat_container("t07", "samp2", { "me3": "val3", "me2": "val2" }, ["le3", "le5"], ["se3", "se7"], 2) generator_obj.send_test_stat_container("t07", "samp3", { "me1": "val1", "me2": "val3", "me3": "val3" }, ["le1"], ["se3", "se2"], 2) generator_obj.send_test_stat_container("t07", "samp4", {"me4": "val4"}, ["le3", "le7"], ["se3", "se5"], 2) logging.info("Checking Stats " + str(UTCTimestampUsec())) assert generator_obj.verify_test_stat( "StatTable.StatTestContainerState.st", "-2m", select_fields=["UUID", "st.s1", "st.m1", "st.i1"], where_clause='name="t07" AND st.l1 CONTAINS le2', num=2, check_rows=[{ "st.s1": "samp1", "st.m1": "{\"me1\":\"val1\", \"me2\":\"val2\"}", "st.i1": 2 }, { "st.s1": "samp1", "st.m1": "{\"me1\":\"val2\", \"me3\":\"val3\"}", "st.i1": 2 }]) assert generator_obj.verify_test_stat( "StatTable.StatTestContainerState.st", "-2m", select_fields=["UUID", "st.s1", "st.m1.me2", "st.i1"], where_clause='name="t07" AND st.l2 CONTAINS se2', num=2, check_rows=[{ "st.s1": "samp1", "st.m1.me2": "val2", "st.i1": 2 }, { "st.s1": "samp3", "st.m1.me2": "val3", "st.i1": 2 }]) assert generator_obj.verify_test_stat( "StatTable.StatTestContainerState.st", "-2m", select_fields=["UUID", "st.s1", "st.l1", "st.l2", "st.i1"], where_clause='name="t07" AND st.m1.me2=val*', num=3, check_rows=[{ "st.s1": "samp1", "st.l1": "le1; le2", "st.l2": "se1; se2", "st.i1": 2 }, { "st.s1": "samp2", "st.l1": "le3; le5", "st.l2": "se3; se7", "st.i1": 2 }, { "st.s1": "samp3", "st.l1": "le1", "st.l2": "se3; se2", "st.i1": 2 }]) return True