db: accept TCP IP-only addresses while preserving stored projections
This commit is contained in:
1 parent
2c7c3c9e8b
commit
d2a8e6fda7
2 files changed
+56
-2
No files matched your search
@@ -36,8 +36,36 @@ static struct TOPO_NODE* record(struct UTUN_INSTANCE* inst, uint64_t timestamp,
|
||||
return ni;
|
||||
}
|
||||
|
||||
/* Старая БД запрещала port=0; перестройка CHECK сохраняет адреса и восстанавливает индексы. */
|
||||
static void test_zero_port_schema(void) {
|
||||
sqlite3 *db = NULL; assert(sqlite3_open(":memory:", &db) == SQLITE_OK);
|
||||
assert(sqlite3_exec(db, "CREATE TABLE node_addresses("
|
||||
"id INTEGER PRIMARY KEY,node_id INTEGER,family INTEGER,protocol INTEGER,address BLOB,"
|
||||
"port INTEGER CHECK(port > 0 AND port <= 65535),rtt INTEGER,addr_type INTEGER,config_type INTEGER,"
|
||||
"nat_mapping INTEGER,nat_inbound INTEGER,nat_source INTEGER,address_kind INTEGER,socket_id INTEGER,"
|
||||
"options BLOB,created_at INTEGER);"
|
||||
"CREATE UNIQUE INDEX idx_na_unique ON node_addresses(node_id,family,socket_id,protocol,address,port,address_kind);"
|
||||
"INSERT INTO node_addresses VALUES(7,1,4,2,X'CB00712C',443,15,4,2,0,0,1,1,3,X'0102',123)",
|
||||
NULL, NULL, NULL) == SQLITE_OK);
|
||||
assert(!topo_node_sqlite_init(db));
|
||||
sqlite3_stmt *statement = NULL;
|
||||
assert(sqlite3_prepare_v2(db, "SELECT port,rtt,nat_source,length(options),created_at FROM node_addresses WHERE id=7",
|
||||
-1, &statement, NULL) == SQLITE_OK);
|
||||
assert(sqlite3_step(statement) == SQLITE_ROW && sqlite3_column_int(statement, 0) == 443);
|
||||
assert(sqlite3_column_int(statement, 1) == 15 && sqlite3_column_int(statement, 2) == ADDRESS_SOURCE_ETCP);
|
||||
assert(sqlite3_column_int(statement, 3) == 2 && sqlite3_column_int(statement, 4) == 123);
|
||||
sqlite3_finalize(statement);
|
||||
assert(sqlite3_exec(db, "UPDATE node_addresses SET port=0 WHERE id=7", NULL, NULL, NULL) == SQLITE_OK);
|
||||
assert(sqlite3_exec(db, "INSERT INTO node_addresses SELECT 8,node_id,family,protocol,address,port,rtt,"
|
||||
"addr_type,config_type,nat_mapping,nat_inbound,nat_source,address_kind,socket_id,options,created_at"
|
||||
" FROM node_addresses WHERE id=7", NULL, NULL, NULL) == SQLITE_CONSTRAINT);
|
||||
assert(!topo_node_sqlite_init(db));
|
||||
sqlite3_close(db);
|
||||
}
|
||||
|
||||
/* Новый wire и SQL сохраняют адреса, протоколы, классификацию и REALITY; смена формата оставляет bootstrap. */
|
||||
static void test_compact_addresses(struct UTUN_INSTANCE *inst) {
|
||||
test_zero_port_schema();
|
||||
sqlite3 *saved_db = inst->topo_sqlite_db;
|
||||
assert(sqlite3_open(":memory:", &inst->topo_sqlite_db) == SQLITE_OK);
|
||||
sqlite3 *db = inst->topo_sqlite_db;
|
||||
|
||||
Reference in new issue
Block a user