Skip to content

Commit 40af7a2

Browse files
authored
test: add missing unit tests (#4885)
* chore: add missing unit tests * add missing pkg tests * missing pkgs * remove data race for spinner
1 parent 527f399 commit 40af7a2

29 files changed

Lines changed: 1638 additions & 10 deletions

File tree

ignite/pkg/archive/tar_gz_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package archive
2+
3+
import (
4+
"bytes"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestCreateArchiveAndExtractArchive(t *testing.T) {
13+
root := t.TempDir()
14+
oldWD, err := os.Getwd()
15+
require.NoError(t, err)
16+
require.NoError(t, os.Chdir(root))
17+
t.Cleanup(func() {
18+
require.NoError(t, os.Chdir(oldWD))
19+
})
20+
21+
src := "src"
22+
require.NoError(t, os.MkdirAll(filepath.Join(src, "nested"), 0o755))
23+
require.NoError(t, os.WriteFile(filepath.Join(src, "a.txt"), []byte("alpha"), 0o600))
24+
require.NoError(t, os.WriteFile(filepath.Join(src, "nested", "b.txt"), []byte("beta"), 0o600))
25+
26+
var buf bytes.Buffer
27+
require.NoError(t, CreateArchive(src, &buf))
28+
29+
dst := filepath.Join(root, "out")
30+
require.NoError(t, os.MkdirAll(dst, 0o755))
31+
require.NoError(t, ExtractArchive(dst, bytes.NewReader(buf.Bytes())))
32+
33+
gotA, err := os.ReadFile(filepath.Join(dst, "src", "a.txt"))
34+
require.NoError(t, err)
35+
require.Equal(t, "alpha", string(gotA))
36+
37+
gotB, err := os.ReadFile(filepath.Join(dst, "src", "nested", "b.txt"))
38+
require.NoError(t, err)
39+
require.Equal(t, "beta", string(gotB))
40+
}
41+
42+
func TestAddToArchiveReturnsErrorForMissingFile(t *testing.T) {
43+
var buf bytes.Buffer
44+
require.NoError(t, CreateArchive(t.TempDir(), &buf))
45+
46+
err := addToArchive(nil, filepath.Join(t.TempDir(), "does-not-exist"))
47+
require.Error(t, err)
48+
}
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package chaincmd
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
8+
"github.com/ignite/cli/v29/ignite/pkg/cmdrunner/step"
9+
)
10+
11+
func TestInitCommandBuildsExpectedCommand(t *testing.T) {
12+
cmd := New("simd", WithChainID("my-chain"), WithHome("/tmp/simd"))
13+
14+
s := step.New(cmd.InitCommand("my-moniker"))
15+
16+
require.Equal(t, "simd", s.Exec.Command)
17+
require.Equal(t, []string{
18+
"init",
19+
"my-moniker",
20+
"--chain-id",
21+
"my-chain",
22+
"--home",
23+
"/tmp/simd",
24+
}, s.Exec.Args)
25+
}
26+
27+
func TestAddKeyCommandAddsOptionalFieldsAndKeyringBackend(t *testing.T) {
28+
cmd := New(
29+
"simd",
30+
WithKeyringBackend(KeyringBackendTest),
31+
WithHome("/tmp/simd"),
32+
)
33+
34+
s := step.New(cmd.AddKeyCommand("alice", "118", "3", "1"))
35+
36+
require.Equal(t, "simd", s.Exec.Command)
37+
require.Equal(t, []string{
38+
"keys",
39+
"add",
40+
"alice",
41+
"--output",
42+
"json",
43+
"--coin-type",
44+
"118",
45+
"--account",
46+
"3",
47+
"--index",
48+
"1",
49+
"--keyring-backend",
50+
"test",
51+
"--home",
52+
"/tmp/simd",
53+
}, s.Exec.Args)
54+
}
55+
56+
func TestAddKeyCommandSkipsEmptyOptionalFields(t *testing.T) {
57+
cmd := New("simd")
58+
s := step.New(cmd.AddKeyCommand("alice", "", "", ""))
59+
60+
require.Equal(t, "simd", s.Exec.Command)
61+
require.Equal(t, []string{
62+
"keys",
63+
"add",
64+
"alice",
65+
"--output",
66+
"json",
67+
}, s.Exec.Args)
68+
}
69+
70+
func TestStatusCommandAddsNodeFlag(t *testing.T) {
71+
cmd := New(
72+
"simd",
73+
WithNodeAddress("http://127.0.0.1:26657"),
74+
WithHome("/tmp/simd"),
75+
)
76+
77+
s := step.New(cmd.StatusCommand())
78+
79+
require.Equal(t, "simd", s.Exec.Command)
80+
require.Equal(t, []string{
81+
"status",
82+
"--node",
83+
"http://127.0.0.1:26657",
84+
"--home",
85+
"/tmp/simd",
86+
}, s.Exec.Args)
87+
}
88+
89+
func TestCopyOverridesOptionsWithoutMutatingOriginal(t *testing.T) {
90+
original := New("simd", WithChainID("chain-A"))
91+
copied := original.Copy(WithChainID("chain-B"))
92+
93+
originalStep := step.New(original.InitCommand("alice"))
94+
copiedStep := step.New(copied.InitCommand("alice"))
95+
96+
require.Equal(t, []string{
97+
"init",
98+
"alice",
99+
"--chain-id",
100+
"chain-A",
101+
}, originalStep.Exec.Args)
102+
require.Equal(t, []string{
103+
"init",
104+
"alice",
105+
"--chain-id",
106+
"chain-B",
107+
}, copiedStep.Exec.Args)
108+
}
109+
110+
func TestKeyringBackendFromString(t *testing.T) {
111+
testCases := []struct {
112+
name string
113+
input string
114+
expected KeyringBackend
115+
shouldErr bool
116+
}{
117+
{
118+
name: "unspecified",
119+
input: "",
120+
expected: KeyringBackendUnspecified,
121+
},
122+
{
123+
name: "os",
124+
input: "os",
125+
expected: KeyringBackendOS,
126+
},
127+
{
128+
name: "file",
129+
input: "file",
130+
expected: KeyringBackendFile,
131+
},
132+
{
133+
name: "pass",
134+
input: "pass",
135+
expected: KeyringBackendPass,
136+
},
137+
{
138+
name: "test",
139+
input: "test",
140+
expected: KeyringBackendTest,
141+
},
142+
{
143+
name: "kwallet",
144+
input: "kwallet",
145+
expected: KeyringBackendKwallet,
146+
},
147+
{
148+
name: "invalid",
149+
input: "invalid",
150+
expected: KeyringBackendUnspecified,
151+
shouldErr: true,
152+
},
153+
}
154+
155+
for _, tc := range testCases {
156+
t.Run(tc.name, func(t *testing.T) {
157+
got, err := KeyringBackendFromString(tc.input)
158+
require.Equal(t, tc.expected, got)
159+
if tc.shouldErr {
160+
require.Error(t, err)
161+
return
162+
}
163+
require.NoError(t, err)
164+
})
165+
}
166+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package chaincmdrunner
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestNewKV(t *testing.T) {
11+
kv := NewKV("k", "v")
12+
require.Equal(t, "k", kv.key)
13+
require.Equal(t, "v", kv.value)
14+
}
15+
16+
func TestFindMatchingCloseBracket(t *testing.T) {
17+
data := []byte(`{"a":{"b":1}} trailing`)
18+
idx := findMatchingCloseBracket(data, '{', '}')
19+
require.Equal(t, 12, idx)
20+
21+
require.Equal(t, -1, findMatchingCloseBracket([]byte(`{"a":1`), '{', '}'))
22+
}
23+
24+
func TestCleanAndValidateJSON(t *testing.T) {
25+
raw := []byte("logs...\n{\"code\":0,\"raw_log\":\"ok\",\"txhash\":\"ABC\"}\nmore")
26+
got, err := cleanAndValidateJSON(raw)
27+
require.NoError(t, err)
28+
require.Equal(t, `{"code":0,"raw_log":"ok","txhash":"ABC"}`, string(got))
29+
}
30+
31+
func TestFallbackFormatDetectionConvertsYAML(t *testing.T) {
32+
raw := []byte("code: 0\nraw_log: ok\ntxhash: ABC\n")
33+
got, err := fallbackFormatDetection(raw)
34+
require.NoError(t, err)
35+
require.JSONEq(t, `{"code":0,"raw_log":"ok","txhash":"ABC"}`, string(got))
36+
}
37+
38+
func TestJSONEnsuredBytes(t *testing.T) {
39+
b := newBuffer()
40+
_, err := b.WriteString("noise\n{\"k\":\"v\"}\n")
41+
require.NoError(t, err)
42+
43+
got, err := b.JSONEnsuredBytes()
44+
require.NoError(t, err)
45+
require.JSONEq(t, `{"k":"v"}`, string(got))
46+
}
47+
48+
func TestDecodeTxResult(t *testing.T) {
49+
b := newBuffer()
50+
_, err := b.WriteString("code: 0\nraw_log: ok\ntxhash: HASH\n")
51+
require.NoError(t, err)
52+
53+
got, err := decodeTxResult(b)
54+
require.NoError(t, err)
55+
require.Equal(t, 0, got.Code)
56+
require.Equal(t, "ok", got.RawLog)
57+
require.Equal(t, "HASH", got.TxHash)
58+
}
59+
60+
func TestQueryTxByEventsRequiresSelectors(t *testing.T) {
61+
r := Runner{}
62+
events, err := r.QueryTxByEvents(context.Background())
63+
require.Error(t, err)
64+
require.Nil(t, events)
65+
}
66+
67+
func TestQueryTxByQueryRequiresSelectors(t *testing.T) {
68+
r := Runner{}
69+
events, err := r.QueryTxByQuery(context.Background())
70+
require.Error(t, err)
71+
require.Nil(t, events)
72+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package chainregistry
2+
3+
import (
4+
"encoding/json"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestChainSaveJSON(t *testing.T) {
13+
path := filepath.Join(t.TempDir(), "chain.json")
14+
in := Chain{
15+
ChainName: "ignite",
16+
ChainID: "ignite-1",
17+
}
18+
19+
require.NoError(t, in.SaveJSON(path))
20+
21+
raw, err := os.ReadFile(path)
22+
require.NoError(t, err)
23+
var got Chain
24+
require.NoError(t, json.Unmarshal(raw, &got))
25+
require.Equal(t, in.ChainName, got.ChainName)
26+
require.Equal(t, in.ChainID, got.ChainID)
27+
}
28+
29+
func TestAssetListSaveJSON(t *testing.T) {
30+
path := filepath.Join(t.TempDir(), "assetlist.json")
31+
in := AssetList{
32+
ChainName: "ignite",
33+
Assets: []Asset{
34+
{
35+
Name: "Ignite",
36+
Base: "uignite",
37+
Symbol: "IGNT",
38+
},
39+
},
40+
}
41+
42+
require.NoError(t, in.SaveJSON(path))
43+
44+
raw, err := os.ReadFile(path)
45+
require.NoError(t, err)
46+
var got AssetList
47+
require.NoError(t, json.Unmarshal(raw, &got))
48+
require.Equal(t, in.ChainName, got.ChainName)
49+
require.Len(t, got.Assets, 1)
50+
require.Equal(t, "IGNT", got.Assets[0].Symbol)
51+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package checksum
2+
3+
import (
4+
"crypto/sha256"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
"strings"
9+
"testing"
10+
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestStrings(t *testing.T) {
15+
h := sha256.Sum256([]byte("abc"))
16+
require.Equal(t, fmt.Sprintf("%x", h[:]), Strings("a", "b", "c"))
17+
}
18+
19+
func TestSum(t *testing.T) {
20+
dir := t.TempDir()
21+
require.NoError(t, os.WriteFile(filepath.Join(dir, "a.txt"), []byte("alpha"), 0o600))
22+
require.NoError(t, os.WriteFile(filepath.Join(dir, "b.txt"), []byte("beta"), 0o600))
23+
24+
out := filepath.Join(t.TempDir(), "checksums.txt")
25+
require.NoError(t, Sum(dir, out))
26+
27+
content, err := os.ReadFile(out)
28+
require.NoError(t, err)
29+
text := string(content)
30+
require.Contains(t, text, " a.txt\n")
31+
require.Contains(t, text, " b.txt\n")
32+
}
33+
34+
func TestBinary(t *testing.T) {
35+
bin := filepath.Join(t.TempDir(), "fake-bin")
36+
data := []byte("#!/bin/sh\necho test\n")
37+
require.NoError(t, os.WriteFile(bin, data, 0o700))
38+
39+
want := sha256.Sum256(data)
40+
got, err := Binary(bin)
41+
require.NoError(t, err)
42+
require.Equal(t, fmt.Sprintf("%x", want[:]), got)
43+
}
44+
45+
func TestBinaryReturnsErrorForMissingFile(t *testing.T) {
46+
_, err := Binary(strings.TrimSpace(filepath.Join(t.TempDir(), "missing-bin")))
47+
require.Error(t, err)
48+
}

0 commit comments

Comments
 (0)