mirror of
https://github.com/lightninglabs/loop
synced 2024-11-16 00:12:52 +00:00
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
|
package reservation
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"crypto/rand"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||
|
"github.com/btcsuite/btcd/wire"
|
||
|
"github.com/lightninglabs/loop/fsm"
|
||
|
"github.com/lightninglabs/loop/loopdb"
|
||
|
"github.com/lightningnetwork/lnd/keychain"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
// TestSqlStore tests the basic functionality of the SQLStore.
|
||
|
func TestSqlStore(t *testing.T) {
|
||
|
ctxb := context.Background()
|
||
|
testDb := loopdb.NewTestDB(t)
|
||
|
defer testDb.Close()
|
||
|
|
||
|
store := NewSQLStore(testDb)
|
||
|
|
||
|
// Create a reservation and store it.
|
||
|
reservation := &Reservation{
|
||
|
ID: getRandomReservationID(),
|
||
|
State: fsm.StateType("init"),
|
||
|
ClientPubkey: defaultPubkey,
|
||
|
ServerPubkey: defaultPubkey,
|
||
|
Value: 100,
|
||
|
Expiry: 100,
|
||
|
KeyLocator: keychain.KeyLocator{
|
||
|
Family: 1,
|
||
|
Index: 1,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
err := store.CreateReservation(ctxb, reservation)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
// Get the reservation and compare it.
|
||
|
reservation2, err := store.GetReservation(ctxb, reservation.ID)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, reservation, reservation2)
|
||
|
|
||
|
// Update the reservation and compare it.
|
||
|
reservation.State = fsm.StateType("state2")
|
||
|
err = store.UpdateReservation(ctxb, reservation)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
reservation2, err = store.GetReservation(ctxb, reservation.ID)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, reservation, reservation2)
|
||
|
|
||
|
// Add an outpoint to the reservation and compare it.
|
||
|
reservation.Outpoint = &wire.OutPoint{
|
||
|
Hash: chainhash.Hash{0x01},
|
||
|
Index: 0,
|
||
|
}
|
||
|
reservation.State = Confirmed
|
||
|
|
||
|
err = store.UpdateReservation(ctxb, reservation)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
reservation2, err = store.GetReservation(ctxb, reservation.ID)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, reservation, reservation2)
|
||
|
|
||
|
// Add a second reservation.
|
||
|
reservation3 := &Reservation{
|
||
|
ID: getRandomReservationID(),
|
||
|
State: fsm.StateType("init"),
|
||
|
ClientPubkey: defaultPubkey,
|
||
|
ServerPubkey: defaultPubkey,
|
||
|
Value: 99,
|
||
|
Expiry: 100,
|
||
|
KeyLocator: keychain.KeyLocator{
|
||
|
Family: 1,
|
||
|
Index: 1,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
err = store.CreateReservation(ctxb, reservation3)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
reservations, err := store.ListReservations(ctxb)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, 2, len(reservations))
|
||
|
}
|
||
|
|
||
|
// getRandomReservationID generates a random reservation ID.
|
||
|
func getRandomReservationID() ID {
|
||
|
var id ID
|
||
|
rand.Read(id[:]) // nolint: errcheck
|
||
|
return id
|
||
|
}
|