46 lines
1.9 KiB
Go
46 lines
1.9 KiB
Go
package inventory
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
// The bus's users as records — against a real store, because what is being checked is that the
|
|
// column exists, the upsert behaves, and a plaintext is returned exactly once.
|
|
|
|
func aBusUser(module string) BusUser {
|
|
return BusUser{Username: "one." + module, Kind: BusModule, Node: "one", Module: module}
|
|
}
|
|
|
|
// The plaintext comes back once and the store keeps only a hash that verifies against it. **A
|
|
// credential recoverable from the mesh's store is one whose blast radius is the store's**, so what
|
|
// is asserted is that the password is not in there.
|
|
|
|
// Minting again replaces what was there rather than failing or adding a second row: that is a
|
|
// rotation, and the old credential stops working at the next composition.
|
|
|
|
// Forgetting a node takes every credential that belonged to it — its host's and every module
|
|
// assigned to it. What a forgotten node leaves behind otherwise is a working set of credentials for
|
|
// a machine the mesh no longer knows.
|
|
|
|
// Forgetting the users of no node would forget every user that has none — the controller and every
|
|
// person — so it is refused rather than run.
|
|
|
|
// The controller's own user is created by the installer, so the mesh has to be able to record a
|
|
// credential it did not mint — or the first composition leaves the writer out of the file it writes.
|
|
|
|
// Outside a test a bus password is hashed at bcrypt's default cost: only ForTest lowers it (novox/hq issue 591).
|
|
func TestABusPasswordIsHashedAtTheDefaultCostOutsideATest(t *testing.T) {
|
|
was := busPasswordCostForTest.Load()
|
|
t.Cleanup(func() { busPasswordCostForTest.Store(was) })
|
|
busPasswordCostForTest.Store(0)
|
|
hash, err := hashBusPassword("a password")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got, err := bcrypt.Cost(hash); err != nil || got != bcrypt.DefaultCost {
|
|
t.Fatalf("a bus password is hashed at cost %d (%v), not bcrypt's default %d", got, err, bcrypt.DefaultCost)
|
|
}
|
|
}
|