Skip to content

Commit

Permalink
Add mvr graphql e2e tests (#20408)
Browse files Browse the repository at this point in the history
## Description 

With changes to transactional test runner, we can now run flavors of
indexer and graphql through it


## Test plan 

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol: 
- [ ] Nodes (Validators and Full nodes): 
- [ ] Indexer: 
- [ ] JSON-RPC: 
- [ ] GraphQL: 
- [ ] CLI: 
- [ ] Rust SDK:
- [ ] REST API:
  • Loading branch information
wlmyng authored Jan 22, 2025
1 parent 77a1dde commit e8d1af1
Show file tree
Hide file tree
Showing 79 changed files with 14,191 additions and 0 deletions.
15 changes: 15 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ members = [
"crates/sui-move",
"crates/sui-move-build",
"crates/sui-move-lsp",
"crates/sui-mvr-graphql-e2e-tests",
"crates/sui-mvr-graphql-rpc",
"crates/sui-network",
"crates/sui-node",
Expand Down
30 changes: 30 additions & 0 deletions crates/sui-mvr-graphql-e2e-tests/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "sui-mvr-graphql-e2e-tests"
version = "0.1.0"
authors = ["Mysten Labs <[email protected]>"]
description = "End to end tests for Sui GraphQL"
license = "Apache-2.0"
publish = false
edition = "2021"

[lints]
workspace = true

[dev-dependencies]
anyhow.workspace = true
async-trait.workspace = true
telemetry-subscribers.workspace = true
datatest-stable.workspace = true
serde_json.workspace = true
sui-mvr-graphql-rpc.workspace = true
sui-transactional-test-runner.workspace = true
tokio.workspace = true

[[test]]
name = "tests"
harness = false

[dependencies]

[target.'cfg(msim)'.dependencies]
msim.workspace = true
61 changes: 61 additions & 0 deletions crates/sui-mvr-graphql-e2e-tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
End-to-end tests for GraphQL service, built on top of the transactional test
runner.

# Local Set-up

These tests require a running instance of the `postgres` service, with a
database set-up. The instructions below assume that `postgres` has been
installed using `brew`:

1. See the instructions in the Sui Indexer [README](../sui-indexer/README.md)
for pre-requisites and starting the Postgres service.

2. When postgres is initially installed, it creates a role for your current
user. We need to use that role to create the role that will access the
database:

```sh
$ ME=$(whoami)
$ psql "postgres://$ME:$ME@localhost:5432/postgres" \
-c "CREATE ROLE postgres WITH SUPERUSER LOGIN PASSWORD 'postgrespw';"
```

3. Then, create the database that the tests expect, using the `postgres` user
and increase the max connections since many tests might run in parallel.

```sh
$ psql "postgres://postgres:postgrespw@localhost:5432/postgres" \
-c "CREATE DATABASE sui_indexer_v2;" -c "ALTER SYSTEM SET max_connections = 500;"
```

4. Finally, restart the `postgres` server so the max connections change takes
effect.

Mac
```sh
brew services restart postgresql@15

```

Linux
```sh
/etc/init.d/postgresql restart
```

# Running Locally

```sh
$ cargo nextest run
```

# Snapshot Stability

Tests are pinned to an existing protocol version that has already been used on a
production network. The protocol version controls the protocol config and also
the version of the framework that gets used by tests. By using a version that
has already been used in a production setting, we are guaranteeing that it will
not be changed by later modifications to the protocol or framework (this would
be a bug).

When adding a new test, **remember to set the `--protocol-version`** for that
test to ensure stability.
6 changes: 6 additions & 0 deletions crates/sui-mvr-graphql-e2e-tests/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

#![forbid(unsafe_code)]

// Empty src/lib.rs to get rusty-tags working.
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
processed 17 tasks

task 1, lines 8-30:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"digest": "ZQawQqeikA4pRqKnkcuHuMnGZuKJTSt3V3EVmMjG56k",
"sequenceNumber": 0
},
"last": {
"digest": "ZQawQqeikA4pRqKnkcuHuMnGZuKJTSt3V3EVmMjG56k",
"sequenceNumber": 0
}
},
"first": {
"digest": "ZQawQqeikA4pRqKnkcuHuMnGZuKJTSt3V3EVmMjG56k",
"sequenceNumber": 0
},
"last": {
"digest": "ZQawQqeikA4pRqKnkcuHuMnGZuKJTSt3V3EVmMjG56k",
"sequenceNumber": 0
}
}
}

task 3, line 34:
//# create-checkpoint
Checkpoint created: 1

task 4, lines 36-46:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"sequenceNumber": 0
},
"last": {
"sequenceNumber": 1
}
}
}
}

task 6, line 50:
//# create-checkpoint
Checkpoint created: 2

task 7, lines 52-62:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"sequenceNumber": 0
},
"last": {
"sequenceNumber": 2
}
}
}
}

task 9, line 66:
//# create-checkpoint
Checkpoint created: 3

task 10, lines 68-78:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"sequenceNumber": 1
},
"last": {
"sequenceNumber": 3
}
}
}
}

task 12, line 82:
//# create-checkpoint
Checkpoint created: 4

task 13, lines 84-94:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"sequenceNumber": 2
},
"last": {
"sequenceNumber": 4
}
}
}
}

task 15, line 98:
//# create-checkpoint
Checkpoint created: 5

task 16, lines 100-120:
//# run-graphql
Response: {
"data": {
"availableRange": {
"first": {
"sequenceNumber": 3
},
"last": {
"sequenceNumber": 5
}
},
"first": {
"digest": "ZQawQqeikA4pRqKnkcuHuMnGZuKJTSt3V3EVmMjG56k",
"sequenceNumber": 0
},
"last": {
"digest": "9C7jQMv4YDXtBQFVawbAJTtQf7JefT3XPNUNoWSot5T2",
"sequenceNumber": 5
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

// Test that available range is correctly updated per objects_snapshot catching up

//# init --protocol-version 51 --simulator --objects-snapshot-min-checkpoint-lag 2

//# run-graphql
{
availableRange {
first {
digest
sequenceNumber
}
last {
digest
sequenceNumber
}
}

first: checkpoint(id: { sequenceNumber: 0 } ) {
digest
sequenceNumber
}

last: checkpoint {
digest
sequenceNumber
}
}

//# advance-clock --duration-ns 1

//# create-checkpoint

//# run-graphql
{
availableRange {
first {
sequenceNumber
}
last {
sequenceNumber
}
}
}

//# advance-clock --duration-ns 1

//# create-checkpoint

//# run-graphql
{
availableRange {
first {
sequenceNumber
}
last {
sequenceNumber
}
}
}

//# advance-clock --duration-ns 1

//# create-checkpoint

//# run-graphql
{
availableRange {
first {
sequenceNumber
}
last {
sequenceNumber
}
}
}

//# advance-clock --duration-ns 1

//# create-checkpoint

//# run-graphql
{
availableRange {
first {
sequenceNumber
}
last {
sequenceNumber
}
}
}

//# advance-clock --duration-ns 1

//# create-checkpoint

//# run-graphql
{
availableRange {
first {
sequenceNumber
}
last {
sequenceNumber
}
}

first: checkpoint(id: { sequenceNumber: 0 } ) {
digest
sequenceNumber
}

last: checkpoint {
digest
sequenceNumber
}
}
Loading

0 comments on commit e8d1af1

Please sign in to comment.