From ff96c5280fa4e5b243c4aa51326e11675e38ae69 Mon Sep 17 00:00:00 2001 From: Raj Reddy Date: Tue, 28 Jul 2015 13:36:16 -0700 Subject: [PATCH] Add UT for negative cases for encode/decode functions in cdbif, remove unused code, enable perf tests but at low loop count Closes-Bug: #1479104 Conflicts: src/analytics/test/vizd_test.cc Change-Id: Iac2d23b6f21af1019b7bc1180216ab0e9ccd6e79 --- src/analytics/test/SConscript | 20 -- src/analytics/test/vizd_test.cc | 415 --------------------------- src/analytics/test/vizd_test.sandesh | 125 -------- src/gendb/cdb_if.cc | 98 +------ src/gendb/cdb_if.h | 9 - src/gendb/gendb_if.h | 3 - src/gendb/test/cdb_if_test.cc | 78 +++++ src/gendb/test/gendb_if_test.cc | 36 ++- src/opserver/test/SConscript | 9 +- src/query_engine/test/query_test.cc | 10 - src/query_engine/test/query_test.h | 1 - 11 files changed, 112 insertions(+), 692 deletions(-) delete mode 100644 src/analytics/test/vizd_test.cc delete mode 100644 src/analytics/test/vizd_test.sandesh diff --git a/src/analytics/test/SConscript b/src/analytics/test/SConscript index 93de0d1ccb0..a424d56fd45 100644 --- a/src/analytics/test/SConscript +++ b/src/analytics/test/SConscript @@ -27,7 +27,6 @@ env_noWerror_excep = env_noWerror.Clone() env_noWerror_excep.CppEnableExceptions() SandeshGenFiles = env.SandeshGenCpp('viz_collector_test.sandesh') -SandeshGenFiles += env.SandeshGenCpp('vizd_test.sandesh') SandeshGenSrcs = env.ExtractCpp(SandeshGenFiles) SandeshGenObjs = env.Object(SandeshGenSrcs) @@ -104,25 +103,6 @@ options_test = env.UnitTest('options_test', ['../buildinfo.o', '../options.o', 'options_test.cc']) env.Alias('src/analytics:options_test', options_test) -#vizd_test_obj = env_noWerror_excep.Object('vizd_test.o', 'vizd_test.cc') -#vizd_test = env.UnitTest('vizd_test', -# [ -# SandeshGenObjs, -# env['ANALYTICS_SANDESH_GEN_OBJS'], -# '../viz_message.o', -# '../viz_collector.o', -# '../collector.o', -# '../ruleeng.o', -# '../db_handler.o', -# '../vizd_table_desc.o', -# '../OpServerProxy.o', -# '../generator.o', -# '../redis_connection.o', -# '../redis_processor_vizd.o', -# vizd_test_obj] -# ) -#env.Alias('src/analytics:vizd_test', vizd_test) - protobufEnv = env.Clone() protobuf_test_gen_files = protobufEnv.ProtocGenCpp('test_message.proto') protobuf_test_gen_files += protobufEnv.ProtocGenCpp('test_message_extensions.proto') diff --git a/src/analytics/test/vizd_test.cc b/src/analytics/test/vizd_test.cc deleted file mode 100644 index 2299cbe96c7..00000000000 --- a/src/analytics/test/vizd_test.cc +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. - */ - -#include "testing/gunit.h" - -#include -#include - -#include "base/util.h" -#include "base/parse_object.h" -#include "base/contrail_ports.h" -#include "base/test/task_test_util.h" -#include "io/test/event_manager_test.h" - -#include -#include -#include -#include - -#include "../viz_collector.h" -#include "../ruleeng.h" - -#include "test/viz_collector_test_types.h" -#include "test/vizd_test_types.h" - -#include "cdb_if_mock.h" -#include "OpServerProxyMock.h" -#include "viz_constants.h" - -using namespace std; - -using ::testing::Return; -using ::testing::Field; -using ::testing::AnyOf; -using ::testing::AnyNumber; -using ::testing::_; -using ::testing::Eq; -using ::testing::ElementsAre; - -string sourcehost = "127.0.0.1"; -string collector_server = "127.0.0.1"; -short collector_port = 8180; //random server port - -#define WAIT_FOR(Cond) \ -do { \ - for (int i = 0; i < 10000; i++) { \ - if (Cond) break; \ - usleep(1000); \ - } \ - EXPECT_TRUE(Cond); \ -} while (0) - -class GeneratorTest { -public: - GeneratorTest() : - evm_(new EventManager()), - thread_(new ServerThread(evm_.get())) { - Sandesh::InitGenerator("GeneratorTest", sourcehost, "Test", "Test", evm_.get(), - collector_server, collector_port, 0, NULL, true); - - thread_->Start(); - - WAIT_FOR(Sandesh::SendReady()); - } - - ~GeneratorTest() { - task_util::WaitForIdle(); - evm_->Shutdown(); - if (thread_.get() != NULL) { - thread_->Join(); - } - task_util::WaitForIdle(); - } - - void Shutdown() { - task_util::WaitForIdle(); - Sandesh::Uninit(); - } - - void SendMessageAsync() { - SANDESH_ASYNC_TEST1_SEND(100, "sat1string100"); - SANDESH_ASYNC_TEST1_SEND(101, "sat1string101"); - SANDESH_ASYNC_TEST1_SEND(102, "sat1string102"); - } - - void SendMessageUVETrace() { - UveVirtualNetworkConfig uvevn; - uvevn.set_name("abc-corp:vn02"); - uvevn.set_total_interfaces(10); - uvevn.set_total_virtual_machines(5); - uvevn.set_total_acl_rules(60); - - std::vector vcn; - uvevn.set_connected_networks(vcn); - UveVirtualNetworkConfigTrace::Send(uvevn); - - UveVirtualNetworkAgent uvena; - uvena.set_name("abc-corp:vn02"); - uvena.set_in_tpkts(40); - uvena.set_total_acl_rules(55); - - std::vector vvn; - UveInterVnStats vnstat; - vnstat.set_other_vn("abc-corp:map-reduce-02"); - vnstat.set_tpkts(10); - vnstat.set_bytes(1200); - vvn.push_back(vnstat); - - uvena.set_in_stats(vvn); - UveVirtualNetworkAgentTrace::Send(uvena); - } - - std::auto_ptr evm_; - std::auto_ptr thread_; -}; - -class VizdTest : public ::testing::Test { -public: - VizdTest() { - evm_.reset(new EventManager()); - thread_.reset(new ServerThread(evm_.get())); - - osp_mock_ = (new OpServerProxyMock(evm_.get())); - dbif_mock_ = (new CdbIfMock(evm_.get()->io_service(), boost::bind(&VizdTest::DbErrorHandlerFn, this))); - DbHandler *db_handler(new DbHandler(dbif_mock_)); - Ruleeng *ruleeng(new Ruleeng(db_handler, osp_mock_)); - collector_ = new Collector(evm_.get(), collector_port, db_handler, ruleeng); - - analytics_.reset(new VizCollector(evm_.get(), db_handler, ruleeng, - collector_, osp_mock_)); - - thread_->Start(); - } - - ~VizdTest() { - task_util::WaitForIdle(); - WAIT_FOR(!analytics_->GetCollector()->HasSessions()); - task_util::WaitForIdle(); - evm_->Shutdown(); - if (thread_.get() != NULL) { - thread_->Join(); - } - task_util::WaitForIdle(); - } - - void DbErrorHandlerFn() { - assert(0); - } - - CdbIfMock *dbif_mock() { - return dbif_mock_; - } - - OpServerProxyMock *osp_mock() { - return osp_mock_; - } - - - virtual void SetUp() { - } - - virtual void TearDown() { - analytics_->Shutdown(); - task_util::WaitForIdle(); - - if (collector_) { - TcpServerManager::DeleteServer(collector_); - collector_ = NULL; - } - - Sandesh::Uninit(); - task_util::WaitForIdle(); - } - - std::auto_ptr thread_; - std::auto_ptr evm_; - CdbIfMock *dbif_mock_; - OpServerProxyMock *osp_mock_; - std::auto_ptr analytics_; - Collector *collector_; -}; - -TEST_F(VizdTest, MessagesTest) { - EXPECT_CALL(*dbif_mock(), - Db_Init()) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddSetTablespace(g_viz_constants.COLLECTOR_KEYSPACE)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_GetColumnFamilies(::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return()); - - EXPECT_CALL(*dbif_mock(), - Db_GetRangeSlices(::testing::_, ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumnfamily(::testing::_)) - .Times(AnyNumber()) - .WillRepeatedly(Return(true)); - - analytics_->Init(); - - //SANDESH_ASYNC_TEST1_SEND(100, "sat1string100"); - //SANDESH_ASYNC_TEST1_SEND(101, "sat1string101"); - //SANDESH_ASYNC_TEST1_SEND(102, "sat1string102"); - std::string temp_str0(sizeof(uint32_t), 0); - put_value((uint8_t *)temp_str0.c_str(), sizeof(uint32_t), 1); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(AllOf(Field(&GenDb::Column::cfname_, g_viz_constants.COLLECTOR_GLOBAL_TABLE), - Field(&GenDb::Column::columns_, - ElementsAre( - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SOURCE), - Field(&GenDb::ColElement::elem_value, "127.0.0.1")), - ::testing::_, //NAMESPACE - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MODULE), - Field(&GenDb::ColElement::elem_value, "GeneratorTest")), - ::testing::_, //TIMESTAMP - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MESSAGE_TYPE), - Field(&GenDb::ColElement::elem_value, "SandeshAsyncTest1")), - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SEQUENCE_NUM), - Field(&GenDb::ColElement::elem_value, temp_str0)), - ::testing::_, ::testing::_, ::testing::_))))) - .Times(1) - .WillOnce(Return(true)); - - std::string temp_str1(sizeof(uint32_t), 0); - put_value((uint8_t *)temp_str1.c_str(), sizeof(uint32_t), 2); - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(AllOf(Field(&GenDb::Column::cfname_, g_viz_constants.COLLECTOR_GLOBAL_TABLE), - Field(&GenDb::Column::columns_, - ElementsAre( - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SOURCE), - Field(&GenDb::ColElement::elem_value, "127.0.0.1")), - ::testing::_, //NAMESPACE - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MODULE), - Field(&GenDb::ColElement::elem_value, "GeneratorTest")), - ::testing::_, //TIMESTAMP - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MESSAGE_TYPE), - Field(&GenDb::ColElement::elem_value, "SandeshAsyncTest1")), - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SEQUENCE_NUM), - Field(&GenDb::ColElement::elem_value, temp_str1)), - ::testing::_, ::testing::_, ::testing::_))))) - .Times(1) - .WillOnce(Return(true)); - - std::string temp_str2(sizeof(uint32_t), 0); - put_value((uint8_t *)temp_str2.c_str(), sizeof(uint32_t), 3); - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(AllOf(Field(&GenDb::Column::cfname_, g_viz_constants.COLLECTOR_GLOBAL_TABLE), - Field(&GenDb::Column::columns_, - ElementsAre( - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SOURCE), - Field(&GenDb::ColElement::elem_value, "127.0.0.1")), - ::testing::_, //NAMESPACE - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MODULE), - Field(&GenDb::ColElement::elem_value, "GeneratorTest")), - ::testing::_, //TIMESTAMP - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MESSAGE_TYPE), - Field(&GenDb::ColElement::elem_value, "SandeshAsyncTest1")), - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SEQUENCE_NUM), - Field(&GenDb::ColElement::elem_value, temp_str2)), - ::testing::_, ::testing::_, ::testing::_))))) - .Times(1) - .WillOnce(Return(true)); - - // instantiate a new generator - GeneratorTest gentest; - gentest.SendMessageAsync(); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(AllOf(Field(&GenDb::Column::cfname_, g_viz_constants.COLLECTOR_GLOBAL_TABLE), - Field(&GenDb::Column::columns_, - ElementsAre( - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SOURCE), - Field(&GenDb::ColElement::elem_value, "127.0.0.1")), - ::testing::_, //NAMESPACE - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MODULE), - Field(&GenDb::ColElement::elem_value, "GeneratorTest")), - ::testing::_, //TIMESTAMP - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MESSAGE_TYPE), - Field(&GenDb::ColElement::elem_value, "UveVirtualNetworkConfigTrace")), - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SEQUENCE_NUM), - Field(&GenDb::ColElement::elem_value, temp_str0)), - ::testing::_, ::testing::_, ::testing::_))))) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(AllOf(Field(&GenDb::Column::cfname_, g_viz_constants.COLLECTOR_GLOBAL_TABLE), - Field(&GenDb::Column::columns_, - ElementsAre( - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SOURCE), - Field(&GenDb::ColElement::elem_value, "127.0.0.1")), - ::testing::_, //NAMESPACE - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MODULE), - Field(&GenDb::ColElement::elem_value, "GeneratorTest")), - ::testing::_, //TIMESTAMP - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.MESSAGE_TYPE), - Field(&GenDb::ColElement::elem_value, "UveVirtualNetworkAgentTrace")), - AllOf(Field(&GenDb::ColElement::elem_name, g_viz_constants.SEQUENCE_NUM), - Field(&GenDb::ColElement::elem_value, temp_str0)), - ::testing::_, ::testing::_, ::testing::_))))) - .Times(1) - .WillOnce(Return(true)); - - // this includes all calls - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(Field(&GenDb::Column::cfname_, - g_viz_constants.MESSAGE_TABLE_SOURCE))) - .Times(5) - .WillRepeatedly(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(Field(&GenDb::Column::cfname_, - g_viz_constants.MESSAGE_TABLE_MODULE_ID))) - .Times(5) - .WillRepeatedly(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(Field(&GenDb::Column::cfname_, - g_viz_constants.MESSAGE_TABLE_MESSAGE_TYPE))) - .Times(5) - .WillRepeatedly(Return(true)); - - EXPECT_CALL(*dbif_mock(), - Db_AddColumn(Field(&GenDb::Column::cfname_, "ObjectVNTable"))) - .Times(2) - .WillRepeatedly(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkConfig", "total_interfaces", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkConfig", "total_virtual_machines", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkConfig", "connected_networks", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkConfig", "total_acl_rules", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkAgent", "in_tpkts", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkAgent", "in_stats", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVEUpdate("UveVirtualNetworkAgent", "total_acl_rules", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", ::testing::_, ::testing::_, - ::testing::_, ::testing::_, ::testing::_)) - .Times(1) - .WillOnce(Return(true)); - - EXPECT_CALL(*osp_mock(), - UVENotif("UveVirtualNetworkAgent", - "127.0.0.1", "GeneratorTest", - "abc-corp:vn02", false)); - .Times(1) - .WillOnce(Return(true)); - - gentest.SendMessageUVETrace(); - - //last test shutdown generator - gentest.Shutdown(); -} - -int main(int argc, char **argv) { - LoggingInit(); - ::testing::InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); -} - diff --git a/src/analytics/test/vizd_test.sandesh b/src/analytics/test/vizd_test.sandesh deleted file mode 100644 index 1aad57d6b6d..00000000000 --- a/src/analytics/test/vizd_test.sandesh +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. - */ - -// -// vizd_test.sandesh -// -// UVE Trace Testing -// -// This is for Unit Testing only. -// Cannot coexist with virtual_network.sandesh in the same program -// - -struct VnPolicy { - 1: i32 vnp_major; - 2: i32 vnp_minor; - 3: string vnp_name (aggtype="listkey") -} - -// This is the structure sent by an application to the Collector to represent -// all or part of the Config state of the UVE on this app instance. -// -struct UveVirtualNetworkConfig { - 1: string name (key="ObjectVNTable") - 2: optional bool deleted - 3: optional list attached_policies; - 4: optional list connected_networks (aggtype="union") - 5: optional list partially_connected_networks (aggtype="union") - 6: optional list routing_instance_list (aggtype="union") - 7: optional i32 total_interfaces (aggtype="sum") - 8: optional i32 total_virtual_machines (aggtype="sum") - 9: optional i32 total_acl_rules; - // Add additional items here as needed -} (type = "object") - -uve sandesh UveVirtualNetworkConfigTrace { - 1: UveVirtualNetworkConfig data -} -response sandesh UveVirtualNetworkConfigResp { - 1: UveVirtualNetworkConfig data; -} - -// This is the structure sent by an application to the Collector to represent -// all or part of the Control Plane state of the UVE on this app instance. -// -struct UveVirtualNetworkCtrl { // Control plane view of the virtual network - 1: string name (key="ObjectVNTable") - 2: optional bool deleted - // Add additional items here -} (type = "object") - -uve sandesh UveVirtualNetworkCtrlTrace { - 1: UveVirtualNetworkCtrl data; -} - -struct UveInterVnStats { - 1: string other_vn (aggtype="listkey") - 2: i64 tpkts; - 3: i64 bytes; -} - -// This is the structure sent by an application to the Collector to represent -// all or part of the Data Plane state of the UVE on this app instance. -// -struct UveVirtualNetworkAgent { - 1: string name (key="ObjectVNTable") - 2: optional bool deleted - 3: optional i32 total_acl_rules; - 4: optional list interface_list (aggtype="union") - 5: optional i64 in_tpkts (aggtype="counter") - 6: optional i64 in_bytes (aggtype="counter") - 7: optional i64 out_tpkts (aggtype="counter") - 8: optional i64 out_bytes (aggtype="counter") - 9: optional list in_stats (aggtype="append") - 10: optional list out_stats (aggtype="append") - 11: optional list virtualmachine_list (aggtype="union") -} (type = "object") - -uve sandesh UveVirtualNetworkAgentTrace { - 1: UveVirtualNetworkAgent data; -} - - - -struct VmInterfaceConfig { - 1: string name - 2: optional string ip_address; - 3: optional string virtual_network (aggtype="listkey") - 4: optional list floating_ips; -} - -struct UveVirtualMachineConfig { - 1: string name (key="ObjectVMTable") - 2: optional bool deleted - 3: optional list attached_groups; - 4: optional list interface_list; - 5: optional string vrouter; -} - -uve sandesh UveVirtualMachineConfigTrace { - 1: UveVirtualMachineConfig data -} - -struct VmInterfaceAgent { - 1: string name - 2: optional string ip_address; - 3: optional string virtual_network (aggtype="listkey") - 4: optional list floating_ips; - 5: optional i64 in_pkts (aggtype="counter") - 6: optional i64 in_bytes (aggtype="counter") - 7: optional i64 out_pkts (aggtype="counter") - 8: optional i64 out_bytes (aggtype="counter") -} - -struct UveVirtualMachineAgent { - 1: string name (key="ObjectVMTable") - 2: optional bool deleted - 3: optional list attached_groups; - 4: optional list interface_list; - 5: optional string vrouter; -} - -uve sandesh UveVirtualMachineAgentTrace { - 1: UveVirtualMachineAgent data; -} diff --git a/src/gendb/cdb_if.cc b/src/gendb/cdb_if.cc index b55a5e7eae3..5dbe7a83f3c 100644 --- a/src/gendb/cdb_if.cc +++ b/src/gendb/cdb_if.cc @@ -286,7 +286,7 @@ GenDb::DbDataValue DbDecodeStringComposite(const char *input, // UUID std::string DbEncodeUUIDComposite(const GenDb::DbDataValue &value) { - boost::uuids::uuid u; + boost::uuids::uuid u(boost::uuids::nil_uuid()); try { u = boost::get(value); } catch (boost::bad_get &ex) { @@ -425,7 +425,7 @@ GenDb::DbDataValue DbDecodeStringNonComposite(const std::string &input) { // UUID std::string DbEncodeUUIDNonComposite(const GenDb::DbDataValue &value) { - boost::uuids::uuid u; + boost::uuids::uuid u(boost::uuids::nil_uuid()); try { u = boost::get(value); } catch (boost::bad_get &ex) { @@ -1604,100 +1604,6 @@ bool CdbIf::Db_GetMultiRow(GenDb::ColListVec& ret, const std::string& cfname, return true; } -bool CdbIf::Db_GetRangeSlices(GenDb::ColList& col_list, - const std::string& cfname, const GenDb::ColumnNameRange& crange, - const GenDb::DbDataValueVec& rowkey) { - CdbIfCfInfo *info; - GenDb::NewCf *cf; - if (!Db_GetColumnfamily(&info, cfname) || !(cf = info->cf_.get())) { - stats_.IncrementErrors( - CdbIfStats::CDBIF_STATS_ERR_READ_COLUMN_FAMILY); - UpdateCfReadFailStats(cfname); - CDBIF_LOG_ERR_RETURN_FALSE(cfname << ": NOT FOUND"); - } - bool result = - Db_GetRangeSlicesInternal(col_list, cf, crange, rowkey); - bool col_limit_reached = (col_list.columns_.size() == crange.count); - GenDb::ColumnNameRange crange_new = crange; - if (col_limit_reached && (col_list.columns_.size()>0)) { - // copy last entry of result returned as column start for next qry - crange_new.start_ = *(col_list.columns_.back()).name; - } - // extract rest of the result - while (col_limit_reached && result) { - GenDb::ColList next_col_list; - result = - Db_GetRangeSlicesInternal(next_col_list, cf, crange_new, rowkey); - col_limit_reached = - (next_col_list.columns_.size() == crange.count); - // copy last entry of result returned as column start for next qry - if (col_limit_reached && (next_col_list.columns_.size()>0)) { - crange_new.start_ = *(next_col_list.columns_.back()).name; - } - // copy result after the first entry - NewColVec::iterator it = next_col_list.columns_.begin(); - if (it != next_col_list.columns_.end()) it++; - col_list.columns_.transfer(col_list.columns_.end(), it, - next_col_list.columns_.end(), next_col_list.columns_); - } - return result; -} - -bool CdbIf::Db_GetRangeSlicesInternal(GenDb::ColList& col_list, - const GenDb::NewCf *cf, const GenDb::ColumnNameRange& crange, - const GenDb::DbDataValueVec& rowkey) { - const std::string &cfname(cf->cfname_); - - cassandra::ColumnParent cparent; - cparent.column_family.assign(cfname); - cparent.super_column.assign(""); - // Key - std::string key_string; - if (!ConstructDbDataValueKey(key_string, cf, rowkey)) { - UpdateCfReadFailStats(cfname); - CDBIF_LOG_ERR_RETURN_FALSE(cfname << ": Key encode FAILED"); - } - cassandra::KeyRange krange; - krange.__set_start_key(key_string); - krange.__set_end_key(key_string); - krange.__set_count(1); - // Column Range - std::string start_string; - if (!ConstructDbDataValueColumnName(start_string, cf, crange.start_)) { - UpdateCfReadFailStats(cfname); - CDBIF_LOG_ERR_RETURN_FALSE(cfname << - ": Column Name Range Start encode FAILED"); - } - std::string finish_string; - if (!ConstructDbDataValueColumnName(finish_string, cf, crange.finish_)) { - UpdateCfReadFailStats(cfname); - CDBIF_LOG_ERR_RETURN_FALSE(cfname << - ": Column Name Range Finish encode FAILED"); - } - cassandra::SlicePredicate slicep; - cassandra::SliceRange slicer; - slicer.__set_start(start_string); - slicer.__set_finish(finish_string); - slicer.__set_count(crange.count); - slicep.__set_slice_range(slicer); - - std::vector result; - CDBIF_BEGIN_TRY { - client_->get_range_slices(result, cparent, slicep, krange, ConsistencyLevel::ONE); - } CDBIF_END_TRY_RETURN_FALSE_INTERNAL(cfname, false, false, false, - CdbIfStats::CDBIF_STATS_ERR_READ_COLUMN, - CdbIfStats::CDBIF_STATS_CF_OP_READ_FAIL) - // Convert result - CDBIF_EXPECT_TRUE_ELSE_RETURN_FALSE(result.size() <= 1); - if (result.size() == 1) { - cassandra::KeySlice& ks = result[0]; - if (!ColListFromColumnOrSuper(col_list, ks.columns, cfname)) { - CDBIF_LOG_ERR(cfname << ": Column decode FAILED"); - } - } - return true; -} - bool CdbIf::Db_GetQueueStats(uint64_t *queue_count, uint64_t *enqueues) const { if (cdbq_.get() != NULL) { *queue_count = cdbq_->Length(); diff --git a/src/gendb/cdb_if.h b/src/gendb/cdb_if.h index 374c2ff81e9..86ac4b05a69 100644 --- a/src/gendb/cdb_if.h +++ b/src/gendb/cdb_if.h @@ -54,9 +54,6 @@ class CdbIf : public GenDb::GenDbIf { const std::string& cfname, const std::vector& key, GenDb::ColumnNameRange *crange_ptr = NULL); - bool Db_GetRangeSlices(GenDb::ColList& col_list, - const std::string& cfname, const GenDb::ColumnNameRange& crange, - const GenDb::DbDataValueVec& key); // Queue virtual bool Db_GetQueueStats(uint64_t *queue_count, uint64_t *enqueues) const; @@ -167,12 +164,6 @@ class CdbIf : public GenDb::GenDbIf { org::apache::cassandra::CfDef *newcfdef); // Read static const int kMaxQueryRows = 5000; - // API to get range of column data for a range of rows - // Number of columns returned is less than or equal to count field - // in crange - bool Db_GetRangeSlicesInternal(GenDb::ColList& col_list, - const GenDb::NewCf *cf, const GenDb::ColumnNameRange& crange, - const GenDb::DbDataValueVec& key); // Statistics struct CdbIfStats { diff --git a/src/gendb/gendb_if.h b/src/gendb/gendb_if.h index 7d1cbd78aed..541a3bc7536 100644 --- a/src/gendb/gendb_if.h +++ b/src/gendb/gendb_if.h @@ -185,9 +185,6 @@ class GenDbIf { virtual bool Db_GetMultiRow(ColListVec& ret, const std::string& cfname, const std::vector& key, GenDb::ColumnNameRange *crange_ptr = NULL) = 0; - virtual bool Db_GetRangeSlices(ColList& col_list, - const std::string& cfname, const ColumnNameRange& crange, - const DbDataValueVec& key) = 0; // Queue virtual bool Db_GetQueueStats(uint64_t *queue_count, uint64_t *enqueues) const = 0; diff --git a/src/gendb/test/cdb_if_test.cc b/src/gendb/test/cdb_if_test.cc index f519d5534c2..e595e6e11b2 100644 --- a/src/gendb/test/cdb_if_test.cc +++ b/src/gendb/test/cdb_if_test.cc @@ -75,6 +75,7 @@ class CdbIfTest : public ::testing::Test { TEST_F(CdbIfTest, EncodeDecodeString) { std::vector strings = boost::assign::list_of ("Test String1") + ("") ("Test:Str :ing :2 "); for (size_t i = 0; i < strings.size(); i++) { std::string str(strings[i]); @@ -111,6 +112,24 @@ TEST_F(CdbIfTest, EncodeDecodeString) { EXPECT_EQ(t_ncomposite_dec, t_composite_dec); EXPECT_EQ(ncomposite_dec, composite_dec); } + // Composite - negative test + uint32_t val = 100; + std::string composite_enc(DbEncodeStringComposite(val)); + int offset; + DbDataValue composite_dec( + DbDecodeStringComposite(composite_enc.c_str(), offset)); + EXPECT_EQ(offset, composite_enc.size()); + std::string t_composite_dec; + t_composite_dec = boost::get(composite_dec); + EXPECT_EQ(t_composite_dec, ""); + + // Non Composite - negative test + std::string ncomposite_enc(DbEncodeStringNonComposite(val)); + DbDataValue ncomposite_dec( + DbDecodeStringNonComposite(ncomposite_enc.c_str())); + std::string t_ncomposite_dec; + t_ncomposite_dec = boost::get(ncomposite_dec); + EXPECT_EQ(t_ncomposite_dec, ""); } TEST_F(CdbIfTest, TestEncodeDecodeDouble) { @@ -157,6 +176,25 @@ TEST_F(CdbIfTest, TestEncodeDecodeDouble) { EXPECT_EQ(t_ncomposite_dec, t_composite_dec); EXPECT_EQ(ncomposite_dec, composite_dec); } + std::string val; + std::string composite_enc( + DbEncodeDoubleComposite(val)); + int offset; + DbDataValue composite_dec( + DbDecodeDoubleComposite( + composite_enc.c_str(), offset)); + EXPECT_EQ(offset, composite_enc.size()); + double t_composite_dec; + t_composite_dec = boost::get(composite_dec); + EXPECT_EQ(t_composite_dec, 0); + // Non Composite + std::string ncomposite_enc( + DbEncodeDoubleNonComposite(val)); + DbDataValue ncomposite_dec( + DbDecodeDoubleNonComposite(ncomposite_enc)); + double t_ncomposite_dec; + t_ncomposite_dec = boost::get(ncomposite_dec); + EXPECT_EQ(t_ncomposite_dec, 0); } TEST_F(CdbIfTest, TestEncodeDecodeUUID) { @@ -202,6 +240,26 @@ TEST_F(CdbIfTest, TestEncodeDecodeUUID) { EXPECT_EQ(t_ncomposite_dec, t_composite_dec); EXPECT_EQ(ncomposite_dec, composite_dec); } + // Composite + std::string val; + std::string composite_enc( + DbEncodeUUIDComposite(val)); + int offset; + DbDataValue composite_dec( + DbDecodeUUIDComposite( + composite_enc.c_str(), offset)); + EXPECT_EQ(offset, composite_enc.size()); + boost::uuids::uuid t_composite_dec; + t_composite_dec = boost::get(composite_dec); + EXPECT_EQ(t_composite_dec, boost::uuids::nil_uuid()); + // Non Composite + std::string ncomposite_enc( + DbEncodeUUIDNonComposite(val)); + DbDataValue ncomposite_dec( + DbDecodeUUIDNonComposite(ncomposite_enc)); + boost::uuids::uuid t_ncomposite_dec; + t_ncomposite_dec = boost::get(ncomposite_dec); + EXPECT_EQ(t_ncomposite_dec, boost::uuids::nil_uuid()); } template @@ -249,6 +307,26 @@ void TestEncodeDecodeInteger() { EXPECT_EQ(t_ncomposite_dec, t_composite_dec); EXPECT_EQ(ncomposite_dec, composite_dec); } + // Composite + std::string val; + std::string composite_enc( + DbEncodeIntegerComposite(val)); + int offset; + DbDataValue composite_dec( + DbDecodeIntegerComposite( + composite_enc.c_str(), offset)); + EXPECT_EQ(offset, composite_enc.size()); + NumberType t_composite_dec; + t_composite_dec = boost::get(composite_dec); + EXPECT_EQ(t_composite_dec, std::numeric_limits::max()); + // Non Composite + std::string ncomposite_enc( + DbEncodeIntegerNonComposite(val)); + DbDataValue ncomposite_dec( + DbDecodeIntegerNonComposite(ncomposite_enc)); + NumberType t_ncomposite_dec; + t_ncomposite_dec = boost::get(ncomposite_dec); + EXPECT_EQ(t_ncomposite_dec, std::numeric_limits::max()); } TEST_F(CdbIfTest, EncodeDecodeU8) { diff --git a/src/gendb/test/gendb_if_test.cc b/src/gendb/test/gendb_if_test.cc index 15932a412cf..f3875333e85 100644 --- a/src/gendb/test/gendb_if_test.cc +++ b/src/gendb/test/gendb_if_test.cc @@ -343,8 +343,10 @@ static const uint8_t tu8_(128); static const uint16_t tu16_(65535); static const double tdouble_(1.0); -TEST_F(DbPerfTest, DISABLED_VariantVector) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, VariantVector) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(tstring_); columns.push_back(tu64_); @@ -356,8 +358,10 @@ TEST_F(DbPerfTest, DISABLED_VariantVector) { } } -TEST_F(DbPerfTest, DISABLED_StructVector) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, StructVector) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(DbTestVarStruct(tstring_)); columns.push_back(DbTestVarStruct(tu64_)); @@ -369,8 +373,10 @@ TEST_F(DbPerfTest, DISABLED_StructVector) { } } -TEST_F(DbPerfTest, DISABLED_VariantEncode) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, VariantEncode) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(tstring_); columns.push_back(tu64_); @@ -414,8 +420,10 @@ TEST_F(DbPerfTest, DISABLED_VariantEncode) { } } -TEST_F(DbPerfTest, DISABLED_VariantVisitorEncode) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, VariantVisitorEncode) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(tstring_); columns.push_back(tu64_); @@ -432,8 +440,10 @@ TEST_F(DbPerfTest, DISABLED_VariantVisitorEncode) { } } -TEST_F(DbPerfTest, DISABLED_StructSafeEncode) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, StructSafeEncode) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(DbTestVarStruct(tstring_)); columns.push_back(DbTestVarStruct(tu64_)); @@ -478,8 +488,10 @@ TEST_F(DbPerfTest, DISABLED_StructSafeEncode) { } } -TEST_F(DbPerfTest, DISABLED_StructEncode) { - for (int i = 0; i < 100000; i++) { +TEST_F(DbPerfTest, StructEncode) { + //int loop_count = 100000; + int loop_count = 1; + for (int i = 0; i < loop_count; i++) { std::vector columns; columns.push_back(DbTestVarStruct(tstring_)); columns.push_back(DbTestVarStruct(tu64_)); diff --git a/src/opserver/test/SConscript b/src/opserver/test/SConscript index be9a578a85d..670c44f7f4a 100644 --- a/src/opserver/test/SConscript +++ b/src/opserver/test/SConscript @@ -121,7 +121,14 @@ def run_coverage(env, target, source): import os lcov_run = 'lcov --ignore-errors gcov,source --base-directory ' + Dir('#').abspath +\ ' --directory ' + Dir(env['TOP']).abspath +\ - ' -c -o ' + Dir(env['TOP']).abspath + '/opserver/test/analytics_test.info' + ' -c -o ' + Dir(env['TOP']).abspath + '/opserver/test/analytics_test_intermediate.info' + os.system(lcov_run) + lcov_run = 'lcov -e ' + Dir(env['TOP']).abspath +\ + '/opserver/test/analytics_test_intermediate.info ' +\ + Dir('#').abspath + '/controller/src/analytics/* ' +\ + Dir('#').abspath + '/controller/src/query_engine/* ' +\ + Dir('#').abspath + '/controller/src/gendb/* ' +\ + ' -o ' + Dir(env['TOP']).abspath + '/opserver/test/analytics_test.info' os.system(lcov_run) genhtml_cmd = 'genhtml -o ' + Dir(env['TOP']).abspath + '/opserver/test/test_coverage' +\ diff --git a/src/query_engine/test/query_test.cc b/src/query_engine/test/query_test.cc index deb026bbc9f..52c4788c014 100644 --- a/src/query_engine/test/query_test.cc +++ b/src/query_engine/test/query_test.cc @@ -100,16 +100,6 @@ bool CdbIfMock::Db_GetStringIndexRange(std::string index_field, std::vector& result, const GenDb::Cf& cf, const GenDb::ColumnRange& sr, const GenDb::RowKeyRange& kr) -{ - if (cf.cfname_ == g_viz_constants.MESSAGE_TABLE_SOURCE) return Db_GetStringIndexRange(g_viz_constants.SOURCE, result, cf, sr, kr); - if (cf.cfname_ == g_viz_constants.MESSAGE_TABLE_MODULE_ID) return Db_GetStringIndexRange(g_viz_constants.MODULE, result, cf, sr, kr); - if (cf.cfname_ == g_viz_constants.MESSAGE_TABLE_MESSAGE_TYPE) return Db_GetStringIndexRange(g_viz_constants.MESSAGE_TYPE, result, cf, sr, kr); - if (cf.cfname_ == g_viz_constants.MESSAGE_TABLE_CATEGORY) return Db_GetStringIndexRange(g_viz_constants.CATEGORY, result, cf, sr, kr); - - return true; -} - bool CdbIfMock::Db_GetMultiRow(std::map >& ret, const std::string& cfname, const std::vector& keys) diff --git a/src/query_engine/test/query_test.h b/src/query_engine/test/query_test.h index 604928dedc4..b37b5a9e2e3 100644 --- a/src/query_engine/test/query_test.h +++ b/src/query_engine/test/query_test.h @@ -29,7 +29,6 @@ class CdbIfMock : public CdbIf { bool Db_Init(); bool Db_AddSetTablespace(const std::string& tablespace,const std::string& replication_factor = "1"); - bool Db_GetRangeSlices(std::vector&,const GenDb::Cf&, const GenDb::ColumnRange&, const GenDb::RowKeyRange&); bool Db_GetMultiRow(std::map >& ret, const std::string& cfname, const std::vector& key);