diff --git a/datastore/migrations.go b/datastore/migrations.go index 85ea48a75bef4c13c3bcb994b422a91a2617aec4..aff787e117983989d4a0be5bc6ef30616b0e232e 100644 --- a/datastore/migrations.go +++ b/datastore/migrations.go @@ -44,7 +44,7 @@ INSERT INTO sequence (seq) VALUES (0); `, ` CREATE TABLE active_sessions ( peer_public_key SMALLTEXT, - begin_timestamp DATETIME + begin_timestamp DATETIME, end_timestamp DATETIME, last_handshake DATETIME, active BOOL, @@ -67,5 +67,18 @@ CREATE TABLE tokens ( secret TEXT NOT NULL, roles TEXT ) +`), + sqlite.Statement(` +ALTER TABLE active_sessions ADD COLUMN src_as_num SMALLTEXT +`, ` +ALTER TABLE active_sessions ADD COLUMN src_as_org SMALLTEXT +`, ` +ALTER TABLE active_sessions DROP COLUMN src_as +`, ` +ALTER TABLE sessions ADD COLUMN src_as_num SMALLTEXT +`, ` +ALTER TABLE sessions ADD COLUMN src_as_org SMALLTEXT +`, ` +ALTER TABLE sessions DROP COLUMN src_as `), } diff --git a/datastore/sessions/sessions_test.go b/datastore/sessions/sessions_test.go index 02524b50a7946be75605c2697fb82ebe88995127..fab4c7787fc437bca5d9bc702ead6d146428b353 100644 --- a/datastore/sessions/sessions_test.go +++ b/datastore/sessions/sessions_test.go @@ -72,3 +72,35 @@ func TestSessionFinder(t *testing.T) { t.Fatalf("there are %d active sessions, expected 0", n) } } + +func TestSessionDumper(t *testing.T) { + dir, err := os.MkdirTemp("", "") + if err != nil { + t.Fatal(err) + } + db, err := sqlite.OpenDB(dir+"/sf.sql", datastore.Migrations) + if err != nil { + t.Fatal(err) + } + defer db.Close() + + sf, _ := NewSessionFinder(db) + + t0 := time.Now() + processStats(t, sf, []testData{ + { + PeerStats: gateway.PeerStats{ + PublicKey: "pk1", + LastHandshakeTime: t0, + }, + t: t0, + }, + }) + + err = WithTx(db, func(tx Tx) error { + return tx.DumpActiveSessions(sf.ActiveSessions()) + }) + if err != nil { + t.Fatalf("DumpActiveSessions: %v", err) + } +}