1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 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() {} TearDown()28 void TearDown() 29 { 30 if (stmt_ != nullptr) { 31 sqlite3_finalize(stmt_); 32 } 33 } 34 35 public: Prepare(const std::string & sql)36 void Prepare(const std::string &sql) 37 { 38 int32_t size = static_cast<int32_t>(sql.size()); 39 sqlite3_prepare_v2(stream_.traceDataCache_->db_, sql.c_str(), size, &stmt_, nullptr); 40 } 41 Step(const std::string & sql)42 void Step(const std::string &sql) 43 { 44 Prepare(sql); 45 sqlite3_step(stmt_); 46 sqlite3_finalize(stmt_); 47 stmt_ = nullptr; 48 } 49 Next(const std::vector<int64_t> column)50 void Next(const std::vector<int64_t> column) 51 { 52 sqlite3_step(stmt_); 53 for (size_t i = 0; i < column.size(); ++i) { 54 sqlite3_column_int64(stmt_, static_cast<int32_t>(i)); 55 } 56 } 57 sqlite3_stmt *stmt_; 58 TraceStreamerSelector stream_ = {}; 59 }; 60 /** 61 * @tc.name: SpanjoinTwoTable 62 * @tc.desc: SpanjoinTwoTable with ts,dur,and partitioned cpu 63 * @tc.type: FUNC 64 */ 65 HWTEST_F(SpanJoinTest, SpanjoinTwoTable, TestSize.Level1) 66 { 67 TS_LOGI("test30-1"); 68 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);"); 69 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);"); 70 Step( 71 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 72 Step("INSERT INTO FirstTable VALUES(100, 10, 5);"); 73 Step("INSERT INTO FirstTable VALUES(110, 50, 5);"); 74 Step("INSERT INTO FirstTable VALUES(120, 100, 2);"); 75 Step("INSERT INTO FirstTable VALUES(160, 10, 5);"); 76 Step("INSERT INTO SecondTable VALUES(100, 5, 5);"); 77 Step("INSERT INTO SecondTable VALUES(105, 100, 5);"); 78 Step("INSERT INTO SecondTable VALUES(110, 50, 2);"); 79 Step("INSERT INTO SecondTable VALUES(160, 100, 2);"); 80 Prepare("SELECT * FROM SpanjoinTable"); 81 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 82 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 120); 83 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 40); 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), 160); 87 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 60); 88 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 2); 89 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 90 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 100); 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), 105); 95 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 5); 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), 110); 99 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 50); 100 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 101 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW); 102 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 160); 103 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 10); 104 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5); 105 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 106 } 107 /** 108 * @tc.name: SpanjoinTwoTableWithoutPartitioned 109 * @tc.desc: SpanjoinTwoTable with ts,dur,and without partitioned cpu 110 * @tc.type: FUNC 111 */ 112 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutPartitioned, TestSize.Level2) 113 { 114 TS_LOGI("test30-2"); 115 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);"); 116 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);"); 117 Step( 118 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 119 Step("INSERT INTO FirstTable VALUES(100, 10);"); 120 Step("INSERT INTO FirstTable VALUES(110, 50);"); 121 Step("INSERT INTO FirstTable VALUES(120, 100);"); 122 Step("INSERT INTO FirstTable VALUES(160, 10);"); 123 Step("INSERT INTO SecondTable VALUES(100, 5);"); 124 Step("INSERT INTO SecondTable VALUES(105, 100);"); 125 Step("INSERT INTO SecondTable VALUES(110, 50);"); 126 Step("INSERT INTO SecondTable VALUES(160, 100);"); 127 Prepare("SELECT * FROM SpanjoinTable"); 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 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 150 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 151 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 152 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE); 153 } 154 /** 155 * @tc.name: SpanjoinTwoTableWithoutTs 156 * @tc.desc: SpanjoinTwoTableWithoutTs with dur, partitioned cpu and without ts 157 * @tc.type: FUNC 158 */ 159 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutTs, TestSize.Level3) 160 { 161 TS_LOGI("test30-3"); 162 Step("CREATE TABLE FirstTable(dur UNSIGNED INT, cpu UNSIGNED INT);"); 163 Step("CREATE TABLE SecondTable(dur UNSIGNED INT, cpu UNSIGNED INT);"); 164 Step( 165 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 166 Step("INSERT INTO FirstTable VALUES(10, 5);"); 167 Step("INSERT INTO FirstTable VALUES(50, 5);"); 168 Step("INSERT INTO FirstTable VALUES(100, 2);"); 169 Step("INSERT INTO FirstTable VALUES(10, 5);"); 170 Step("INSERT INTO SecondTable VALUES(5, 5);"); 171 Step("INSERT INTO SecondTable VALUES(100, 5);"); 172 Step("INSERT INTO SecondTable VALUES(50, 2);"); 173 Step("INSERT INTO SecondTable VALUES(100, 2);"); 174 Prepare("SELECT * FROM SpanjoinTable"); 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 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 197 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 198 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 199 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 200 } 201 /** 202 * @tc.name: SpanjoinTwoTableWithoutDur 203 * @tc.desc: SpanjoinTwoTableWithoutTs with ts, partitioned cpu and without dur 204 * @tc.type: FUNC 205 */ 206 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutDur, TestSize.Level4) 207 { 208 TS_LOGI("test30-4"); 209 Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);"); 210 Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);"); 211 Step( 212 "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);"); 213 Step("INSERT INTO FirstTable VALUES(100, 5);"); 214 Step("INSERT INTO FirstTable VALUES(110, 5);"); 215 Step("INSERT INTO FirstTable VALUES(120, 2);"); 216 Step("INSERT INTO FirstTable VALUES(160, 5);"); 217 Step("INSERT INTO SecondTable VALUES(100, 5);"); 218 Step("INSERT INTO SecondTable VALUES(105, 5);"); 219 Step("INSERT INTO SecondTable VALUES(110, 2);"); 220 Step("INSERT INTO SecondTable VALUES(160, 2);"); 221 Prepare("SELECT * FROM SpanjoinTable"); 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 EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0); 244 EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0); 245 EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0); 246 EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE); 247 } 248 } // namespace TraceStreamer 249 } // namespace SysTuning 250