Skip to content

Commit a28ede8

Browse files
committed
Add serialization tests
1 parent e4414df commit a28ede8

File tree

2 files changed

+113
-0
lines changed

2 files changed

+113
-0
lines changed

src/sqlancer/StateToReproduce.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public String getDatabaseVersion() {
4747
return databaseVersion;
4848
}
4949

50+
public DatabaseProvider<?, ?, ?> getDatabaseProvider() {
51+
return databaseProvider;
52+
}
53+
5054
/**
5155
* Logs the statement string without executing the corresponding statement.
5256
*
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package sqlancer;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
6+
7+
import java.io.IOException;
8+
import java.nio.file.Path;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.io.TempDir;
14+
15+
import sqlancer.common.query.ExpectedErrors;
16+
import sqlancer.common.query.Query;
17+
import sqlancer.common.query.SQLQueryAdapter;
18+
import sqlancer.sqlite3.SQLite3Provider;
19+
20+
public class TestStateToReproduce {
21+
22+
@TempDir
23+
Path tempDir;
24+
25+
@Test
26+
public void testBasicFields() throws IOException {
27+
SQLite3Provider provider = new SQLite3Provider();
28+
StateToReproduce state = new StateToReproduce("test_db", provider);
29+
state.databaseVersion = "3.36.0";
30+
state.seedValue = 12345L;
31+
state.exception = "Test exception message";
32+
33+
Path file = tempDir.resolve("test_basic.ser");
34+
state.serialize(file);
35+
StateToReproduce result = StateToReproduce.deserialize(file);
36+
37+
assertEquals(state.getDatabaseName(), result.getDatabaseName());
38+
assertEquals(state.getDatabaseVersion(), result.getDatabaseVersion());
39+
assertEquals(state.getSeedValue(), result.getSeedValue());
40+
assertEquals(state.getException(), result.getException());
41+
}
42+
43+
@Test
44+
public void testStatements() throws IOException {
45+
SQLite3Provider provider = new SQLite3Provider();
46+
StateToReproduce state = new StateToReproduce("test_statements", provider);
47+
List<Query<?>> statements = new ArrayList<>();
48+
49+
ExpectedErrors errors1 = new ExpectedErrors();
50+
errors1.add("syntax error");
51+
errors1.add("table already exists");
52+
statements.add(new SQLQueryAdapter("CREATE TABLE test (id INTEGER);", errors1));
53+
54+
ExpectedErrors errors2 = new ExpectedErrors();
55+
errors2.add("constraint failed");
56+
statements.add(new SQLQueryAdapter("INSERT INTO test VALUES (1);", errors2));
57+
58+
statements.add(new SQLQueryAdapter("SELECT * FROM test;", new ExpectedErrors()));
59+
state.setStatements(statements);
60+
61+
Path file = tempDir.resolve("test_statements.ser");
62+
state.serialize(file);
63+
StateToReproduce result = StateToReproduce.deserialize(file);
64+
65+
List<Query<?>> resultStatements = result.getStatements();
66+
assertEquals(3, resultStatements.size());
67+
68+
Query<?> q1 = resultStatements.get(0);
69+
Query<?> q2 = resultStatements.get(1);
70+
Query<?> q3 = resultStatements.get(2);
71+
72+
assertEquals("CREATE TABLE test (id INTEGER);", q1.getLogString());
73+
assertEquals("INSERT INTO test VALUES (1);", q2.getLogString());
74+
assertEquals("SELECT * FROM test;", q3.getLogString());
75+
76+
ExpectedErrors e1 = q1.getExpectedErrors();
77+
ExpectedErrors e2 = q2.getExpectedErrors();
78+
ExpectedErrors e3 = q3.getExpectedErrors();
79+
80+
assertTrue(e1.errorIsExpected("syntax error"));
81+
assertTrue(e1.errorIsExpected("table already exists"));
82+
assertFalse(e1.errorIsExpected("constraint failed"));
83+
84+
assertFalse(e2.errorIsExpected("syntax error"));
85+
assertTrue(e2.errorIsExpected("constraint failed"));
86+
87+
assertFalse(e3.errorIsExpected("syntax error"));
88+
assertFalse(e3.errorIsExpected("constraint failed"));
89+
}
90+
91+
@Test
92+
public void testDatabaseProvider() throws IOException {
93+
SQLite3Provider provider = new SQLite3Provider();
94+
StateToReproduce state = new StateToReproduce("test_provider", provider);
95+
state.logStatement("CREATE TABLE test (id INTEGER);");
96+
97+
Path file = tempDir.resolve("test_provider.ser");
98+
state.serialize(file);
99+
StateToReproduce result = StateToReproduce.deserialize(file);
100+
101+
// Verify databaseProvider is correctly deserialized
102+
assertEquals("sqlite3", result.getDatabaseProvider().getDBMSName());
103+
104+
// Verify databaseProvider functionality by testing logStatement
105+
result.logStatement("INSERT INTO test VALUES (1);");
106+
assertEquals(2, result.getStatements().size());
107+
assertEquals("INSERT INTO test VALUES (1);", result.getStatements().get(1).getLogString());
108+
}
109+
}

0 commit comments

Comments
 (0)