1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <hwext/gtest-ext.h> 17 #include <hwext/gtest-tag.h> 18 19 #include "span_join.h" 20 #include "trace_streamer_selector.h" 21 22 using namespace testing::ext; 23 namespace SysTuning { 24 namespace TraceStreamer { 25 class SpanJoinTest : public ::testing::Test { 26 public: SetUp()27 void SetUp() 28 { 29 stream_.InitFilter(); 30 } TearDown()31 void TearDown() {} 32 33 public: Prepare(const std::string & sql)34 void Prepare(const std::string& sql) 35 { 36 int size = static_cast<int>(sql.size()); 37 sqlite3_prepare_v2(stream_.traceDataCache_->db_, sql.c_str(), size, &stmt_, nullptr); 38 } 39 Step(const std::string & sql)40 void Step(const std::string& sql) 41 { 42 Prepare(sql); 43 sqlite3_step(stmt_); 44 } 45 Next(const std::vector<int64_t> column)46 void Next(const std::vector<int64_t> column) 47 { 48 sqlite3_step(stmt_); 49 for (size_t i = 0; i < column.size(); ++i) { 50 sqlite3_column_int64(stmt_, static_cast<int>(i)); 51 } 52 } 53 sqlite3_stmt* stmt_; 54 TraceStreamerSelector stream_ = {}; 55 }; 56 /** 57 * @tc.name: SpanjoinTwoTable 58 * @tc.desc: SpanjoinTwoTable with ts,dur,and partitioned cpu 59 * @tc.type: FUNC 60 */ 61 HWTEST_F(SpanJoinTest, SpanjoinTwoTable, TestSize.Level1) 62 { 63 TS_LOGI("test30-1"); 64 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);"); 65 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);"); 66 Step( 67 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 68 Step("INSERT INTO FirstTable VALUES(100, 10, 5);"); 69 Step("INSERT INTO FirstTable VALUES(110, 50, 5);"); 70 Step("INSERT INTO FirstTable VALUES(120, 100, 2);"); 71 Step("INSERT INTO FirstTable VALUES(160, 10, 5);"); 72 Step("INSERT INTO SecondTable VALUES(100, 5, 5);"); 73 Step("INSERT INTO SecondTable VALUES(105, 100, 5);"); 74 Step("INSERT INTO SecondTable VALUES(110, 50, 2);"); 75 Step("INSERT INTO SecondTable VALUES(160, 100, 2);"); 76 Prepare("SELECT * FROM SpanjoinTable"); 77 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 78 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 120); 79 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 40); 80 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 2); 81 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 82 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 160); 83 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 60); 84 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 2); 85 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 86 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 100); 87 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 5); 88 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 89 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 90 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 105); 91 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 5); 92 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 93 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 94 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 110); 95 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 50); 96 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 97 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 98 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 160); 99 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 10); 100 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 101 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 102 } 103 /** 104 * @tc.name: SpanjoinTwoTableWithoutPartitioned 105 * @tc.desc: SpanjoinTwoTable with ts,dur,and without partitioned cpu 106 * @tc.type: FUNC 107 */ 108 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutPartitioned, TestSize.Level2) 109 { 110 TS_LOGI("test30-2"); 111 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);"); 112 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);"); 113 Step( 114 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 115 Step("INSERT INTO FirstTable VALUES(100, 10);"); 116 Step("INSERT INTO FirstTable VALUES(110, 50);"); 117 Step("INSERT INTO FirstTable VALUES(120, 100);"); 118 Step("INSERT INTO FirstTable VALUES(160, 10);"); 119 Step("INSERT INTO SecondTable VALUES(100, 5);"); 120 Step("INSERT INTO SecondTable VALUES(105, 100);"); 121 Step("INSERT INTO SecondTable VALUES(110, 50);"); 122 Step("INSERT INTO SecondTable VALUES(160, 100);"); 123 Prepare("SELECT * FROM SpanjoinTable"); 124 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 125 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 126 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 127 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 128 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 129 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 130 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 131 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 132 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 133 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 134 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 135 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 136 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 137 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 138 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 139 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 140 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 141 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 142 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 143 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 144 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 145 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 146 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 147 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 148 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 149 } 150 /** 151 * @tc.name: SpanjoinTwoTableWithoutTs 152 * @tc.desc: SpanjoinTwoTableWithoutTs with dur, partitioned cpu and without ts 153 * @tc.type: FUNC 154 */ 155 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutTs, TestSize.Level3) 156 { 157 TS_LOGI("test30-3"); 158 Step("CREATE TABLE FirstTable(dur UNSIGNED INT, cpu UNSIGNED INT);"); 159 Step("CREATE TABLE SecondTable(dur UNSIGNED INT, cpu UNSIGNED INT);"); 160 Step( 161 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 162 Step("INSERT INTO FirstTable VALUES(10, 5);"); 163 Step("INSERT INTO FirstTable VALUES(50, 5);"); 164 Step("INSERT INTO FirstTable VALUES(100, 2);"); 165 Step("INSERT INTO FirstTable VALUES(10, 5);"); 166 Step("INSERT INTO SecondTable VALUES(5, 5);"); 167 Step("INSERT INTO SecondTable VALUES(100, 5);"); 168 Step("INSERT INTO SecondTable VALUES(50, 2);"); 169 Step("INSERT INTO SecondTable VALUES(100, 2);"); 170 Prepare("SELECT * FROM SpanjoinTable"); 171 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 172 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 173 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 174 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 175 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 176 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 177 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 178 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 179 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 180 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 181 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 182 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 183 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 184 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 185 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 186 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 187 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 188 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 189 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 190 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 191 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 192 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 193 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 194 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 195 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 196 } 197 /** 198 * @tc.name: SpanjoinTwoTableWithoutDur 199 * @tc.desc: SpanjoinTwoTableWithoutTs with ts, partitioned cpu and without dur 200 * @tc.type: FUNC 201 */ 202 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutDur, TestSize.Level4) 203 { 204 TS_LOGI("test30-4"); 205 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);"); 206 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);"); 207 Step( 208 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 209 Step("INSERT INTO FirstTable VALUES(100, 5);"); 210 Step("INSERT INTO FirstTable VALUES(110, 5);"); 211 Step("INSERT INTO FirstTable VALUES(120, 2);"); 212 Step("INSERT INTO FirstTable VALUES(160, 5);"); 213 Step("INSERT INTO SecondTable VALUES(100, 5);"); 214 Step("INSERT INTO SecondTable VALUES(105, 5);"); 215 Step("INSERT INTO SecondTable VALUES(110, 2);"); 216 Step("INSERT INTO SecondTable VALUES(160, 2);"); 217 Prepare("SELECT * FROM SpanjoinTable"); 218 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 219 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 220 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 221 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 222 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 223 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 224 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 225 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 226 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 227 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 228 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 229 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 230 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 231 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 232 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 233 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 234 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 235 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 236 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 237 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 238 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 239 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 240 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 241 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 242 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 243 } 244 } // namespace TraceStreamer 245 } // namespace SysTuning 246