Files
zeekay 7cf87b230b node-unified is the node
The module already called itself github.com/luxfi/node while containing no node
in Go: cmd/luxd was twenty-one lines that printed the size of a few types, and
the Go column of the matrix measured a VM plugin. A repo that fetches the thing
it claims to be has not replaced it, so the Go sources move in — 1515 files,
the daemon and everything under it — and the build reaches outside this module
for nothing.

Rust and C++ sit beside it unchanged and are still measured against it by the
differential. That is the point of one repo: the reference implementation and
the two ports are the same checkout, so parity is a thing you can run rather
than a thing you assert.

Verified: builds, and the closure carries no lux-private — checked at build time
rather than believed. The daemon starts twelve chains on a local network
(P X C Q Z A B G K M F, plus D through its plugin) and reports healthy.
2026-09-07 16:15:25 -07:00

108 lines
2.4 KiB
Go

// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package password
import (
"fmt"
"testing"
"github.com/stretchr/testify/require"
)
func TestSufficientlyStrong(t *testing.T) {
tests := []struct {
password string
expected Strength
}{
{
password: "",
expected: VeryWeak,
},
{
password: "a",
expected: VeryWeak,
},
{
password: "password",
expected: VeryWeak,
},
{
password: "thisisareallylongandpresumablyverystrongpassword",
expected: VeryStrong,
},
}
for _, test := range tests {
t.Run(fmt.Sprintf("%s-%d", test.password, test.expected), func(t *testing.T) {
require.True(t, SufficientlyStrong(test.password, test.expected))
})
}
}
func TestIsValid(t *testing.T) {
tests := []struct {
password string
expected Strength
expectedErr error
}{
{
password: "",
expected: VeryWeak,
expectedErr: ErrEmptyPassword,
},
{
password: "a",
expected: VeryWeak,
},
{
password: "password",
expected: VeryWeak,
},
{
password: "thisisareallylongandpresumablyverystrongpassword",
expected: VeryStrong,
},
{
password: string(make([]byte, maxPassLen)),
expected: VeryWeak,
},
{
password: string(make([]byte, maxPassLen+1)),
expected: VeryWeak,
expectedErr: ErrPassMaxLength,
},
{
password: "password",
expected: Weak,
expectedErr: ErrWeakPassword,
},
}
for _, test := range tests {
t.Run(fmt.Sprintf("%s-%d", test.password, test.expected), func(t *testing.T) {
err := IsValid(test.password, test.expected)
require.ErrorIs(t, err, test.expectedErr)
})
}
}
// TestIsValidRejectsLongButGuessable pins that strength is scored, not measured
// in characters. Every password here clears the 20-character bar the length-only
// fallback applied at OK (Fair), and each is one of the first guesses a cracker
// makes. The fallback shipped in the default build, so these cleared the bar
// anywhere a password was set.
func TestIsValidRejectsLongButGuessable(t *testing.T) {
for _, pw := range []string{
"aaaaaaaaaaaaaaaaaaaa",
"password1234password",
"11111111111111111111",
"qwertyuiopqwertyuiop",
"passwordpasswordpassword",
} {
t.Run(pw, func(t *testing.T) {
require.GreaterOrEqual(t, len(pw), 20)
require.ErrorIs(t, IsValid(pw, OK), ErrWeakPassword)
require.False(t, SufficientlyStrong(pw, OK))
})
}
}