Skip to content

Commit

Permalink
test 2
Browse files Browse the repository at this point in the history
  • Loading branch information
LexLuthr committed Oct 1, 2024
1 parent b3f4382 commit 38f8d0e
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 123 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ jobs:
env:
CONTAINER_NAME: yugabyte-${{ github.run_id }}-${{ matrix.test-suite.name }}
strategy:
fail-fast: false # Continue running even if one test fails
matrix:
test-suite:
- name: test-itest-curio
Expand Down
206 changes: 83 additions & 123 deletions itests/harmonydb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,133 +8,101 @@ import (
"testing"

"github.com/stretchr/testify/require"
"golang.org/x/xerrors"

"github.com/filecoin-project/curio/harmony/harmonydb"

"github.com/filecoin-project/lotus/itests/kit"
"github.com/filecoin-project/lotus/node/impl"
)

func withSetup(t *testing.T, f func(*kit.TestMiner)) {
_, miner, _ := kit.EnsembleMinimal(t,
kit.LatestActorsAt(-1),
kit.MockProofs(),
kit.WithSectorIndexDB(),
)

f(miner)
}

func TestCrud(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

withSetup(t, func(miner *kit.TestMiner) {
cdb := miner.BaseAPI.(*impl.StorageMinerAPI).HarmonyDB
_, err := cdb.Exec(ctx, `
sharedITestID := harmonydb.ITestNewID()
cdb, err := harmonydb.NewFromConfigWithITestID(t, sharedITestID)
require.NoError(t, err)

//cdb := miner.BaseAPI.(*impl.StorageMinerAPI).HarmonyDB
_, err = cdb.Exec(ctx, `
INSERT INTO
itest_scratch (some_int, content)
VALUES
(11, 'cows'),
(5, 'cats')
`)
if err != nil {
t.Fatal("Could not insert: ", err)
}
var ints []struct {
Count int `db:"some_int"`
Animal string `db:"content"`
Unpopulated int
}
err = cdb.Select(ctx, &ints, "SELECT content, some_int FROM itest_scratch")
if err != nil {
t.Fatal("Could not select: ", err)
}
if len(ints) != 2 {
t.Fatal("unexpected count of returns. Want 2, Got ", len(ints))
}
if ints[0].Count != 11 || ints[1].Count != 5 {
t.Fatal("expected [11,5] got ", ints)
}
if ints[0].Animal != "cows" || ints[1].Animal != "cats" {
t.Fatal("expected, [cows, cats] ", ints)
}
fmt.Println("test completed")
})
require.NoError(t, err)
var ints []struct {
Count int `db:"some_int"`
Animal string `db:"content"`
Unpopulated int
}
err = cdb.Select(ctx, &ints, "SELECT content, some_int FROM itest_scratch")
require.NoError(t, err)

require.Len(t, ints, 2, "unexpected count of returns. Want 2, Got ", len(ints))
require.True(t, ints[0].Count != 11 || ints[1].Count != 5, "expected [11,5] got ", ints)
require.True(t, ints[0].Animal != "cows" || ints[1].Animal != "cats", "expected, [cows, cats] ", ints)
fmt.Println("test completed")

}

func TestTransaction(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

withSetup(t, func(miner *kit.TestMiner) {
testID := harmonydb.ITestNewID()
cdb, err := harmonydb.NewFromConfigWithITestID(t, testID)
require.NoError(t, err)
if _, err := cdb.Exec(ctx, "INSERT INTO itest_scratch (some_int) VALUES (4), (5), (6)"); err != nil {
t.Fatal("E0", err)
}
_, err = cdb.BeginTransaction(ctx, func(tx *harmonydb.Tx) (commit bool, err error) {
if _, err := tx.Exec("INSERT INTO itest_scratch (some_int) VALUES (7), (8), (9)"); err != nil {
t.Fatal("E1", err)
}

// sum1 is read from OUTSIDE the transaction so it's the old value
var sum1 int
if err := cdb.QueryRow(ctx, "SELECT SUM(some_int) FROM itest_scratch").Scan(&sum1); err != nil {
t.Fatal("E2", err)
}
if sum1 != 4+5+6 {
t.Fatal("Expected 15, got ", sum1)
}

// sum2 is from INSIDE the transaction, so the updated value.
var sum2 int
if err := tx.QueryRow("SELECT SUM(some_int) FROM itest_scratch").Scan(&sum2); err != nil {
t.Fatal("E3", err)
}
if sum2 != 4+5+6+7+8+9 {
t.Fatal("Expected 39, got ", sum2)
}
return false, nil // rollback
})
if err != nil {
t.Fatal("ET", err)
testID := harmonydb.ITestNewID()
cdb, err := harmonydb.NewFromConfigWithITestID(t, testID)
require.NoError(t, err)
_, err = cdb.Exec(ctx, "INSERT INTO itest_scratch (some_int) VALUES (4), (5), (6)")
require.NoError(t, err)
_, err = cdb.BeginTransaction(ctx, func(tx *harmonydb.Tx) (commit bool, err error) {
if _, err = tx.Exec("INSERT INTO itest_scratch (some_int) VALUES (7), (8), (9)"); err != nil {
return false, err
}

var sum2 int
// Query() example (yes, QueryRow would be preferred here)
q, err := cdb.Query(ctx, "SELECT SUM(some_int) FROM itest_scratch")
if err != nil {
t.Fatal("E4", err)
// sum1 is read from OUTSIDE the transaction so it's the old value
var sum1 int
if err := cdb.QueryRow(ctx, "SELECT SUM(some_int) FROM itest_scratch").Scan(&sum1); err != nil {
t.Fatal("E2", err)
}
defer q.Close()
var rowCt int
for q.Next() {
err := q.Scan(&sum2)
if err != nil {
t.Fatal("error scanning ", err)
}
rowCt++
if sum1 != 4+5+6 {
return false, xerrors.Errorf("Expected 15, got %d", sum1)
}
if sum2 != 4+5+6 {
t.Fatal("Expected 15, got ", sum2)

// sum2 is from INSIDE the transaction, so the updated value.
var sum2 int
if err := tx.QueryRow("SELECT SUM(some_int) FROM itest_scratch").Scan(&sum2); err != nil {
t.Fatal("E3", err)
}
if rowCt != 1 {
t.Fatal("unexpected count of rows")
if sum2 != 4+5+6+7+8+9 {
return false, xerrors.Errorf("Expected 39, got %d", sum2)
}
return false, nil // rollback
})
require.NoError(t, err)

var sum2 int
// Query() example (yes, QueryRow would be preferred here)
q, err := cdb.Query(ctx, "SELECT SUM(some_int) FROM itest_scratch")
require.NoError(t, err)
defer q.Close()
var rowCt int
for q.Next() {
err := q.Scan(&sum2)
require.NoError(t, err)
rowCt++
}
require.Equal(t, 4+5+6, sum2, "Expected 15, got ", sum2)
require.Equal(t, 1, rowCt, "unexpected count of rows")
}

func TestPartialWalk(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

withSetup(t, func(miner *kit.TestMiner) {
testID := harmonydb.ITestNewID()
cdb, err := harmonydb.NewFromConfigWithITestID(t, testID)
require.NoError(t, err)
if _, err := cdb.Exec(ctx, `
testID := harmonydb.ITestNewID()
cdb, err := harmonydb.NewFromConfigWithITestID(t, testID)
require.NoError(t, err)
_, err = cdb.Exec(ctx, `
INSERT INTO
itest_scratch (content, some_int)
VALUES
Expand All @@ -143,39 +111,31 @@ func TestPartialWalk(t *testing.T) {
('hello world', 7),
('3rd integration test', 8),
('fiddlesticks', 9)
`); err != nil {
t.Fatal("e1", err)
}
`)
require.NoError(t, err)

// TASK: FIND THE ID of the string with a specific SHA256
needle := "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
q, err := cdb.Query(ctx, `SELECT id, content FROM itest_scratch`)
if err != nil {
t.Fatal("e2", err)
}
defer q.Close()
// TASK: FIND THE ID of the string with a specific SHA256
needle := "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
q, err := cdb.Query(ctx, `SELECT id, content FROM itest_scratch`)
require.NoError(t, err)
defer q.Close()

var tmp struct {
Src string `db:"content"`
ID int
}
var tmp struct {
Src string `db:"content"`
ID int
}

var done bool
for q.Next() {
var done bool
for q.Next() {

if err := q.StructScan(&tmp); err != nil {
t.Fatal("structscan err " + err.Error())
}
err = q.StructScan(&tmp)
require.NoError(t, err)

bSha := sha256.Sum256([]byte(tmp.Src))
if hex.EncodeToString(bSha[:]) == needle {
done = true
break
}
}
if !done {
t.Fatal("We didn't find it.")
bSha := sha256.Sum256([]byte(tmp.Src))
if hex.EncodeToString(bSha[:]) == needle {
done = true
break
}
// Answer: tmp.ID
})
}
require.True(t, done)
}

0 comments on commit 38f8d0e

Please sign in to comment.