Skip to content

Commit

Permalink
Fix test
Browse files Browse the repository at this point in the history
  • Loading branch information
acquamarin committed Nov 26, 2023
1 parent b3c38ef commit 40c23b8
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 120 deletions.
10 changes: 0 additions & 10 deletions test/runner/e2e_copy_transaction_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
}

void validateDatabaseStateBeforeCheckPointCopyNode(table_id_t tableID) {
auto nodeTableSchema =
(NodeTableSchema*)catalog->getReadOnlyVersion()->getTableSchema(tableID);
ASSERT_EQ(std::make_unique<Connection>(database.get())
->query("MATCH (p:person) return *")
->getNumTuples(),
Expand All @@ -58,8 +56,6 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
}

void validateDatabaseStateAfterCheckPointCopyNode(table_id_t tableID) {
auto nodeTableSchema =
(NodeTableSchema*)catalog->getReadOnlyVersion()->getTableSchema(tableID);
validateTinysnbPersonAgeProperty();
ASSERT_EQ(getStorageManager(*database)->getNodesStatisticsAndDeletedIDs()->getMaxNodeOffset(
&transaction::DUMMY_READ_TRANSACTION, tableID),
Expand All @@ -69,7 +65,6 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
void copyNodeCSVCommitAndRecoveryTest(TransactionTestType transactionTestType) {
conn->query(createPersonTableCMD);
auto preparedStatement = conn->prepare(copyPersonTableCMD);
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down Expand Up @@ -117,17 +112,13 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
}

void validateDatabaseStateBeforeCheckPointCopyRel(table_id_t tableID) {
auto relTableSchema =
(RelTableSchema*)catalog->getReadOnlyVersion()->getTableSchema(tableID);
auto dummyWriteTrx = transaction::Transaction::getDummyWriteTrx();
ASSERT_EQ(getStorageManager(*database)->getRelsStatistics()->getNextRelOffset(
dummyWriteTrx.get(), tableID),
14);
}

void validateDatabaseStateAfterCheckPointCopyRel(table_id_t knowsTableID) {
auto relTableSchema =
(RelTableSchema*)catalog->getReadOnlyVersion()->getTableSchema(knowsTableID);
validateTinysnbKnowsDateProperty();
auto relsStatistics = getStorageManager(*database)->getRelsStatistics();
auto dummyWriteTrx = transaction::Transaction::getDummyWriteTrx();
Expand All @@ -144,7 +135,6 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
conn->query(copyPersonTableCMD);
conn->query(createKnowsTableCMD);
auto preparedStatement = conn->prepare(copyKnowsTableCMD);
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down
169 changes: 59 additions & 110 deletions test/runner/e2e_ddl_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class TinySnbDDLTest : public DBTest {
}

void validateDatabaseStateAfterCommitCreateNodeTable() {
ASSERT_TRUE(catalog->getWriteVersion()->containsNodeTable("EXAM_PAPER"));
ASSERT_TRUE(catalog->containsTable(&DUMMY_READ_TRANSACTION, "EXAM_PAPER"));
ASSERT_EQ(getStorageManager(*database)
->getNodesStatisticsAndDeletedIDs()
->getNumNodeStatisticsAndDeleteIDsPerTable(),
Expand All @@ -49,35 +49,32 @@ class TinySnbDDLTest : public DBTest {

// Since DDL statements are in an auto-commit transaction, we can't use the query interface to
// test the recovery algorithm and parallel read.
void createNodeTable(TransactionTestType transactionTestType) {
executeQueryWithoutCommit(
"CREATE NODE TABLE EXAM_PAPER(STUDENT_ID INT64, MARK DOUBLE, PRIMARY KEY(STUDENT_ID))");
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsNodeTable("EXAM_PAPER"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsNodeTable("EXAM_PAPER"));
ASSERT_EQ(getStorageManager(*database)
->getNodesStatisticsAndDeletedIDs()
->getNumNodeStatisticsAndDeleteIDsPerTable(),
3);
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
void createTable(TableType tableType, TransactionTestType transactionTestType) {
std::string tableName;
switch (tableType) {
case TableType::NODE: {
tableName = "EXAM_PAPER";
executeQueryWithoutCommit("CREATE NODE TABLE EXAM_PAPER(STUDENT_ID INT64, MARK DOUBLE, "
"PRIMARY KEY(STUDENT_ID))");
} break;
case TableType::REL: {
tableName = "likes";
executeQueryWithoutCommit(
"CREATE REL TABLE likes(FROM person TO organisation, RATING INT64, MANY_ONE)");
} break;
default: {
KU_UNREACHABLE;
}
validateDatabaseStateAfterCommitCreateNodeTable();
}

void createRelTable(TransactionTestType transactionTestType) {
executeQueryWithoutCommit(
"CREATE REL TABLE likes(FROM person TO organisation, RATING INT64, MANY_ONE)");
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsRelTable("likes"));
}
ASSERT_FALSE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsRelTable("likes"));
ASSERT_FALSE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
ASSERT_TRUE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
}

void validateBelongsRelTable() {
Expand Down Expand Up @@ -106,70 +103,25 @@ class TinySnbDDLTest : public DBTest {
"Binder exception: Nodes a and b are not connected through rel e.");
}

void createRelMixedRelationCommitAndRecoveryTest(TransactionTestType transactionTestType) {
conn->query("CREATE NODE TABLE country(id INT64, PRIMARY KEY(id));");
conn->query("CREATE (c:country{id: 0});");
executeQueryWithoutCommit(
"CREATE REL TABLE belongs(FROM person TO organisation, FROM organisation TO country);");
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsRelTable("belongs"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
initWithoutLoadingGraph();
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsRelTable("belongs"));
} else {
conn->query("COMMIT");
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsRelTable("belongs"));
}
executeQueryWithoutCommit("COPY belongs FROM \"" +
TestHelper::appendKuzuRootPath("dataset/tinysnb/eBelongs.csv\""));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
validateBelongsRelTable();
}

void dropNodeTableCommitAndRecoveryTest(TransactionTestType transactionTestType) {
conn->query("CREATE NODE TABLE university(address STRING, PRIMARY KEY(address));");
auto tableSchema =
catalog->getReadOnlyVersion()
->getTableSchema(catalog->getTableID(&DUMMY_READ_TRANSACTION, "university"))
->copy();
executeQueryWithoutCommit("DROP TABLE university");
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsNodeTable("university"));
void dropTableCommitAndRecoveryTest(
std::string tableName, TransactionTestType transactionTestType) {
auto tableID = catalog->getTableID(&DUMMY_READ_TRANSACTION, tableName);
auto tableSchema = catalog->getTableSchema(&DUMMY_READ_TRANSACTION, tableID)->copy();
executeQueryWithoutCommit(stringFormat("DROP TABLE {}", tableName));
ASSERT_TRUE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsNodeTable("university"));
ASSERT_TRUE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsNodeTable("university"));
}

void dropRelTableCommitAndRecoveryTest(TransactionTestType transactionTestType) {
auto tableSchema =
catalog->getReadOnlyVersion()
->getTableSchema(catalog->getTableID(&DUMMY_READ_TRANSACTION, "knows"))
->copy();
executeQueryWithoutCommit("DROP TABLE knows");
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsRelTable("knows"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_TRUE(catalog->getReadOnlyVersion()->containsRelTable("knows"));
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
ASSERT_FALSE(catalog->getReadOnlyVersion()->containsRelTable("knows"));
ASSERT_FALSE(catalog->containsTable(&DUMMY_READ_TRANSACTION, tableName));
}

void dropNodeTableProperty(TransactionTestType transactionTestType) {
executeQueryWithoutCommit("ALTER TABLE person DROP gender");
ASSERT_TRUE(catalog->getReadOnlyVersion()
->getTableSchema(personTableID)
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("gender"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
Expand All @@ -178,8 +130,7 @@ class TinySnbDDLTest : public DBTest {
} else {
conn->query("COMMIT");
}
ASSERT_FALSE(catalog->getReadOnlyVersion()
->getTableSchema(personTableID)
ASSERT_FALSE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("gender"));
auto result = conn->query("MATCH (p:person) RETURN * ORDER BY p.ID LIMIT 1");
ASSERT_EQ(TestHelper::convertResultToString(*result),
Expand All @@ -193,8 +144,7 @@ class TinySnbDDLTest : public DBTest {

void dropRelTableProperty(TransactionTestType transactionTestType) {
executeQueryWithoutCommit("ALTER TABLE studyAt DROP places");
ASSERT_TRUE(catalog->getReadOnlyVersion()
->getTableSchema(studyAtTableID)
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, studyAtTableID)
->containProperty("places"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
Expand All @@ -203,8 +153,7 @@ class TinySnbDDLTest : public DBTest {
} else {
conn->query("COMMIT");
}
ASSERT_FALSE(catalog->getReadOnlyVersion()
->getTableSchema(personTableID)
ASSERT_FALSE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("places"));
auto result = conn->query(
"MATCH (:person)-[s:studyAt]->(:organisation) RETURN * ORDER BY s.year DESC LIMIT 1");
Expand All @@ -217,7 +166,6 @@ class TinySnbDDLTest : public DBTest {

void executeQueryWithoutCommit(std::string query) {
auto preparedStatement = conn->prepare(query);
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down Expand Up @@ -298,45 +246,45 @@ class TinySnbDDLTest : public DBTest {

void renameTable(TransactionTestType transactionTestType) {
executeQueryWithoutCommit("ALTER TABLE person RENAME TO student");
ASSERT_EQ(catalog->getWriteVersion()->getTableSchema(personTableID)->tableName, "student");
ASSERT_EQ(
catalog->getReadOnlyVersion()->getTableSchema(personTableID)->tableName, "person");
catalog->getTableSchema(&DUMMY_WRITE_TRANSACTION, personTableID)->tableName, "student");
ASSERT_EQ(
catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)->tableName, "person");
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_EQ(
catalog->getWriteVersion()->getTableSchema(personTableID)->tableName, "student");
ASSERT_EQ(
catalog->getReadOnlyVersion()->getTableSchema(personTableID)->tableName, "person");
ASSERT_EQ(catalog->getTableSchema(&DUMMY_WRITE_TRANSACTION, personTableID)->tableName,
"student");
ASSERT_EQ(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)->tableName,
"person");
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
ASSERT_EQ(
catalog->getReadOnlyVersion()->getTableSchema(personTableID)->tableName, "student");
catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)->tableName, "student");
auto result = conn->query("MATCH (s:student) return s.age order by s.age");
ASSERT_EQ(TestHelper::convertResultToString(*result),
std::vector<std::string>({"20", "20", "25", "30", "35", "40", "45", "83"}));
}

void renameProperty(TransactionTestType transactionTestType) {
executeQueryWithoutCommit("ALTER TABLE person RENAME fName TO name");
ASSERT_TRUE(
catalog->getWriteVersion()->getTableSchema(personTableID)->containProperty("name"));
ASSERT_TRUE(
catalog->getReadOnlyVersion()->getTableSchema(personTableID)->containProperty("fName"));
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_WRITE_TRANSACTION, personTableID)
->containProperty("name"));
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("fName"));
if (transactionTestType == TransactionTestType::RECOVERY) {
conn->query("COMMIT_SKIP_CHECKPOINT");
ASSERT_TRUE(
catalog->getWriteVersion()->getTableSchema(personTableID)->containProperty("name"));
ASSERT_TRUE(catalog->getReadOnlyVersion()
->getTableSchema(personTableID)
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_WRITE_TRANSACTION, personTableID)
->containProperty("name"));
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("fName"));
initWithoutLoadingGraph();
} else {
conn->query("COMMIT");
}
ASSERT_TRUE(
catalog->getReadOnlyVersion()->getTableSchema(personTableID)->containProperty("name"));
ASSERT_TRUE(catalog->getTableSchema(&DUMMY_READ_TRANSACTION, personTableID)
->containProperty("name"));
auto result = conn->query("MATCH (p:person) return p.name order by p.name");
ASSERT_EQ(TestHelper::convertResultToString(*result),
std::vector<std::string>({"Alice", "Bob", "Carol", "Dan", "Elizabeth", "Farooq", "Greg",
Expand All @@ -353,35 +301,35 @@ class TinySnbDDLTest : public DBTest {
};

TEST_F(TinySnbDDLTest, CreateNodeTableCommitNormalExecution) {
createNodeTable(TransactionTestType::NORMAL_EXECUTION);
createTable(TableType::NODE, TransactionTestType::NORMAL_EXECUTION);
}

TEST_F(TinySnbDDLTest, CreateNodeTableCommitRecovery) {
createNodeTable(TransactionTestType::RECOVERY);
createTable(TableType::NODE, TransactionTestType::RECOVERY);
}

TEST_F(TinySnbDDLTest, CreateRelTableCommitNormalExecution) {
createRelTable(TransactionTestType::NORMAL_EXECUTION);
createTable(TableType::REL, TransactionTestType::NORMAL_EXECUTION);
}

TEST_F(TinySnbDDLTest, CreateRelTableCommitRecovery) {
createRelTable(TransactionTestType::RECOVERY);
createTable(TableType::REL, TransactionTestType::RECOVERY);
}

TEST_F(TinySnbDDLTest, DropNodeTableCommitNormalExecution) {
dropNodeTableCommitAndRecoveryTest(TransactionTestType::NORMAL_EXECUTION);
dropTableCommitAndRecoveryTest("movies", TransactionTestType::NORMAL_EXECUTION);
}

TEST_F(TinySnbDDLTest, DropNodeTableCommitRecovery) {
dropNodeTableCommitAndRecoveryTest(TransactionTestType::RECOVERY);
dropTableCommitAndRecoveryTest("movies", TransactionTestType::RECOVERY);
}

TEST_F(TinySnbDDLTest, DropRelTableCommitNormalExecution) {
dropRelTableCommitAndRecoveryTest(TransactionTestType::NORMAL_EXECUTION);
dropTableCommitAndRecoveryTest("knows", TransactionTestType::NORMAL_EXECUTION);
}

TEST_F(TinySnbDDLTest, DropRelTableCommitRecovery) {
dropRelTableCommitAndRecoveryTest(TransactionTestType::RECOVERY);
dropTableCommitAndRecoveryTest("knows", TransactionTestType::RECOVERY);
}

TEST_F(TinySnbDDLTest, DropNodeTablePropertyNormalExecution) {
Expand Down Expand Up @@ -668,7 +616,8 @@ TEST_F(TinySnbDDLTest, AddListOfListOfStringPropertyToStudyAtTableWithDefaultVal

TEST_F(TinySnbDDLTest, AddListOfListOfStringPropertyToStudyAtTableWithDefaultValueRecovery) {
addPropertyToStudyAtTableWithDefaultValue("STRING[][]" /* propertyType */,
"[['hello','good','long long string test'],['6'],['very very long string']]" /* defaultVal*/
"[['hello','good','long long string test'],['6'],['very very long string']]" /*
defaultVal*/
,
TransactionTestType::RECOVERY);
}
Expand Down

0 comments on commit 40c23b8

Please sign in to comment.