Skip to content

Commit

Permalink
tests(dot): modify integration test files
Browse files Browse the repository at this point in the history
- add `integration` build tag to test files
- improve existing integration test code
  • Loading branch information
edwardmack authored and qdm12 committed Feb 12, 2022
1 parent 02744c8 commit 63303a3
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 260 deletions.
73 changes: 39 additions & 34 deletions dot/build_spec_integration_test.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
// Copyright 2021 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

//go:build integration
// +build integration

package dot

import (
"encoding/json"
"io"
"fmt"
"os"
"path/filepath"
"testing"

"github.com/ChainSafe/gossamer/lib/genesis"
"github.com/ChainSafe/gossamer/lib/runtime"
"github.com/stretchr/testify/require"
)

// hex encoding for ":code", used as key for code is raw genesis files.
const codeHex = "0x3a636f6465"

func TestBuildFromGenesis(t *testing.T) {
t.Parallel()

file := genesis.CreateTestGenesisJSONFile(t, false)
bs, err := BuildFromGenesis(file, 0)

expectedChainType := "TESTCHAINTYPE"
const expectedChainType = "TESTCHAINTYPE"
expectedProperties := map[string]interface{}{
"ss58Format": 0.0,
"tokenDecimals": 0.0,
Expand Down Expand Up @@ -54,27 +63,29 @@ func TestBuildFromGenesis(t *testing.T) {
}

func TestBuildFromGenesis_WhenGenesisDoesNotExists(t *testing.T) {
t.Parallel()

bs, err := BuildFromGenesis("/not/exists/genesis.json", 0)
require.Nil(t, bs)
require.Error(t, err, os.ErrNotExist)
require.ErrorIs(t, err, os.ErrNotExist)
}

func TestWriteGenesisSpecFileWhenFileAlreadyExists(t *testing.T) {
filename := filepath.Join(t.TempDir(), "existing.json")
file, err := os.Create(filename)
require.NoError(t, err)
err = file.Close()
require.NoError(t, err)
t.Parallel()

filePath := filepath.Join(t.TempDir(), "genesis.raw")
someBytes := []byte("Testing some bytes")
err = WriteGenesisSpecFile(someBytes, filename)
err := WriteGenesisSpecFile(someBytes, filePath)

require.Error(t, err)
require.EqualError(t, err,
fmt.Sprintf("file %s already exists, rename to avoid overwriting", filePath))
}

func TestWriteGenesisSpecFile(t *testing.T) {
t.Parallel()

cfg := NewTestConfig(t)
cfg.Init.Genesis = "../chain/gssmr/genesis.json"
cfg.Init.Genesis = runtime.GetAbsolutePath("../chain/gssmr/genesis.json")

expected, err := genesis.NewGenesisFromJSONRaw(cfg.Init.Genesis)
require.NoError(t, err)
Expand All @@ -88,38 +99,32 @@ func TestWriteGenesisSpecFile(t *testing.T) {
data, err := bs.ToJSONRaw()
require.NoError(t, err)

tmpFiles := []string{
"/tmp/unique-raw-genesis.json",
"./unique-raw-genesis.json",
}

for _, tmpFile := range tmpFiles {
err = WriteGenesisSpecFile(data, tmpFile)
require.NoError(t, err)
require.FileExists(t, tmpFile)
tmpFile := filepath.Join(t.TempDir(), "unique-raw-genesis.json")
err = WriteGenesisSpecFile(data, tmpFile)
require.NoError(t, err)
require.FileExists(t, tmpFile)

defer os.Remove(tmpFile)
file, err := os.Open(tmpFile)
require.NoError(t, err)
defer file.Close()

file, err := os.Open(tmpFile)
require.NoError(t, err)
defer file.Close()
gen := new(genesis.Genesis)

genesisBytes, err := io.ReadAll(file)
require.NoError(t, err)
decoder := json.NewDecoder(file)
err = decoder.Decode(gen)
require.NoError(t, err)

gen := new(genesis.Genesis)
err = json.Unmarshal(genesisBytes, gen)
require.NoError(t, err)
require.Equal(t, expected.ChainType, gen.ChainType)
require.Equal(t, expected.Properties, gen.Properties)

require.Equal(t, expected.ChainType, gen.ChainType)
require.Equal(t, expected.Properties, gen.Properties)
}
}

func TestBuildFromDB(t *testing.T) {
t.Parallel()

// setup expected
cfg := NewTestConfig(t)
cfg.Init.Genesis = "../chain/gssmr/genesis.json"
cfg.Init.Genesis = runtime.GetAbsolutePath("../chain/gssmr/genesis.json")
expected, err := genesis.NewGenesisFromJSONRaw(cfg.Init.Genesis)
require.NoError(t, err)
// initialise node (initialise state database and load genesis data)
Expand All @@ -134,5 +139,5 @@ func TestBuildFromDB(t *testing.T) {
err = json.Unmarshal(res, &jGen)
require.NoError(t, err)

require.Equal(t, expected.Genesis.Raw["top"]["0x3a636f6465"], jGen.Genesis.Runtime["system"]["code"])
require.Equal(t, expected.Genesis.Raw["top"][codeHex], jGen.Genesis.Runtime["system"]["code"])
}
9 changes: 6 additions & 3 deletions dot/config_integration_test.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
// Copyright 2021 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

//go:build integration
// +build integration

package dot

import (
"os"
"testing"

"github.com/stretchr/testify/require"
)

// TestExportConfig tests exporting a toml configuration file
func TestExportConfig(t *testing.T) {
cfg, cfgFile := newTestConfigWithFile(t)
require.NotNil(t, cfg)

genFile := NewTestGenesisRawFile(t, cfg)

cfg.Init.Genesis = genFile

err := InitNode(cfg)
require.Nil(t, err)
require.NoError(t, err)

file := exportConfig(cfg, cfgFile.Name())
require.NotNil(t, file)
os.Remove(file.Name())
}
50 changes: 35 additions & 15 deletions dot/import_integration_test.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
// Copyright 2021 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

//go:build integration
// +build integration

package dot

import (
"encoding/json"
"io/ioutil"
"math/big"
"os"
"path/filepath"
"testing"

"github.com/ChainSafe/gossamer/dot/state"
"github.com/ChainSafe/gossamer/dot/types"
"github.com/ChainSafe/gossamer/internal/log"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/pkg/scale"

"github.com/stretchr/testify/require"
)

func setupStateFile(t *testing.T) string {
filename := "../lib/runtime/test_data/kusama/block1482002.out"
t.Helper()

data, err := os.ReadFile(filename)
const filename = "../lib/runtime/test_data/kusama/block1482002.out"

data, err := ioutil.ReadFile(filename)
require.NoError(t, err)

rpcPairs := make(map[string]interface{})
Expand All @@ -31,16 +38,17 @@ func setupStateFile(t *testing.T) string {
bz, err := json.Marshal(pairs)
require.NoError(t, err)

testDir := t.TempDir()
fp := filepath.Join(testDir, "state.json")
err = os.WriteFile(fp, bz, 0777)
fp := filepath.Join(t.TempDir(), "state.json")
err = ioutil.WriteFile(fp, bz, 0777)
require.NoError(t, err)

return fp
}

func setupHeaderFile(t *testing.T) string {
headerStr := `{` +
t.Helper()

const headerStr = `{` +
`"digest":{"logs":[` +
`"0x0642414245b501013c0000009659bd0f0000000070edad1c9064fff78cb18435223d8adaf5ea04c24b1a8766e3dc01eb03cc6a0c11b79793d4e31cc0990838229c44fed1669a7c7c79e1e6d0a96374d6496728069d1ef739e290497a0e3b728fa88fcbdd3a5504e0efde0242e7a806dd4fa9260c",` + //nolint:lll
`"0x054241424501019e7f28dddcf27c1e6b328d5694c368d5b2ec5dbe0e412ae1c98f88d53be4d8502fac571f3f19c9caaf281a673319241e0c5095a683ad34316204088a36a4bd86"` + //nolint:lll
Expand All @@ -49,20 +57,19 @@ func setupHeaderFile(t *testing.T) string {
`"number":"0x169d12",` +
`"parentHash":"0x3b45c9c22dcece75a30acc9c2968cb311e6b0557350f83b430f47559db786975",` +
`"stateRoot":"0x09f9ca28df0560c2291aa16b56e15e07d1e1927088f51356d522722aa90ca7cb"}`
testDir := t.TempDir()
fp := filepath.Join(testDir, "header.json")
err := os.WriteFile(fp, []byte(headerStr), 0777)
fp := filepath.Join(t.TempDir(), "header.json")
err := ioutil.WriteFile(fp, []byte(headerStr), 0777)
require.NoError(t, err)
return fp
}

func TestNewTrieFromPairs(t *testing.T) {
fp := setupStateFile(t)
tr, err := newTrieFromPairs(fp)
trie, err := newTrieFromPairs(fp)
require.NoError(t, err)

expectedRoot := common.MustHexToHash("0x09f9ca28df0560c2291aa16b56e15e07d1e1927088f51356d522722aa90ca7cb")
require.Equal(t, expectedRoot, tr.MustHash())
require.Equal(t, expectedRoot, trie.MustHash())
}

func TestNewHeaderFromFile(t *testing.T) {
Expand All @@ -74,7 +81,7 @@ func TestNewHeaderFromFile(t *testing.T) {
digest := types.NewDigest()
err = scale.Unmarshal(digestBytes, &digest)
require.NoError(t, err)
require.Equal(t, 2, len(digest.Types))
require.Len(t, digest.Types, 2)

expected := &types.Header{
ParentHash: common.MustHexToHash("0x3b45c9c22dcece75a30acc9c2968cb311e6b0557350f83b430f47559db786975"),
Expand All @@ -88,7 +95,7 @@ func TestNewHeaderFromFile(t *testing.T) {
}

func TestImportState(t *testing.T) {
basepath := t.TempDir()
basepath := os.TempDir()

cfg := NewTestConfig(t)
require.NotNil(t, cfg)
Expand All @@ -104,7 +111,20 @@ func TestImportState(t *testing.T) {
stateFP := setupStateFile(t)
headerFP := setupHeaderFile(t)

firstSlot := uint64(262493679)
const firstSlot = uint64(262493679)
err = ImportState(basepath, stateFP, headerFP, firstSlot)
require.NoError(t, err)
// confirm data is imported into db
config := state.Config{
Path: basepath,
LogLevel: log.Info,
}
srv := state.NewService(config)
srv.SetupBase()

lookupKey := []byte{98, 108, 111, 99, 107, 104, 100, 114, 88, 127, 109, 161, 191, 167, 26, 103, 95, 16, 223, 160,
246, 62, 223, 207, 22, 142, 142, 206, 151, 235, 95, 82, 106, 175, 14, 138, 142, 130, 219, 63}
data, err := srv.DB().Get(lookupKey)
require.NoError(t, err)
require.NotNil(t, data)
}
Loading

0 comments on commit 63303a3

Please sign in to comment.