103 lines
2.0 KiB
Go
103 lines
2.0 KiB
Go
package migration
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/boundary/internal/db"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMigration(t *testing.T) {
|
|
require := require.New(t)
|
|
const (
|
|
createTables = `
|
|
create table session_testing (
|
|
public_id text primary key,
|
|
server_id text
|
|
);
|
|
create table session_connection_testing (
|
|
public_id text primary key,
|
|
session_id text,
|
|
server_id text
|
|
);
|
|
|
|
`
|
|
insertSession = `insert into session_testing values ($1, $2)`
|
|
insertSessionConnection = `insert into session_connection_testing values ($1, $2)`
|
|
|
|
update = `
|
|
update session_connection_testing sc
|
|
set
|
|
server_id = s.server_id
|
|
from
|
|
session_testing s
|
|
where
|
|
sc.session_id = s.public_id;
|
|
`
|
|
selectQuery = `select session_id, server_id from session_connection_testing order by session_id`
|
|
)
|
|
|
|
conn, _ := db.TestSetup(t, "postgres")
|
|
db := conn.DB()
|
|
_, err := db.Exec(createTables)
|
|
require.NoError(err)
|
|
|
|
tests := []struct {
|
|
sessId string
|
|
sessServerId string
|
|
connId string
|
|
}{
|
|
{
|
|
"sess1",
|
|
"server1",
|
|
"conn1",
|
|
},
|
|
{
|
|
"sess2",
|
|
"server1",
|
|
"conn2",
|
|
},
|
|
{
|
|
"sess3",
|
|
"server2",
|
|
"conn3",
|
|
},
|
|
{
|
|
"sess4",
|
|
"server2",
|
|
"conn4",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
_, err = db.Query(insertSession, tt.sessId, tt.sessServerId)
|
|
require.NoError(err)
|
|
_, err := db.Query(insertSessionConnection, tt.connId, tt.sessId)
|
|
require.NoError(err)
|
|
}
|
|
|
|
// At this point server ID should be empty in connections table
|
|
rows, err := db.Query(selectQuery)
|
|
require.NoError(err)
|
|
var sessVal string
|
|
var serverVal sql.NullString
|
|
for rows.Next() {
|
|
require.NoError(rows.Scan(&sessVal, &serverVal))
|
|
require.False(serverVal.Valid)
|
|
}
|
|
|
|
_, err = db.Query(update)
|
|
require.NoError(err)
|
|
|
|
// Now it should match the server
|
|
rows, err = db.Query(selectQuery)
|
|
require.NoError(err)
|
|
var count int
|
|
for rows.Next() {
|
|
require.NoError(rows.Scan(&sessVal, &serverVal))
|
|
require.True(serverVal.Valid)
|
|
require.Equal(tests[count].sessServerId, serverVal.String)
|
|
count++
|
|
}
|
|
}
|