cosmos-sdk/schema/testing/statesim/app_diff.go
Aaron Craelius 0f39b4e491
chore(schema/testing): upgrade to go 1.23 iterators (#21282)
Co-authored-by: Julien Robert <julien@rbrt.fr>
2024-08-15 20:58:58 +00:00

56 lines
1.3 KiB
Go

package statesim
import (
"fmt"
"cosmossdk.io/schema/view"
)
// DiffAppStates compares the app state of two objects that implement AppState and returns a string with a diff if they
// are different or the empty string if they are the same.
func DiffAppStates(expected, actual view.AppState) string {
res := ""
expectNumModules, err := expected.NumModules()
if err != nil {
res += fmt.Sprintf("ERROR getting expected num modules: %s\n", err)
return res
}
actualNumModules, err := actual.NumModules()
if err != nil {
res += fmt.Sprintf("ERROR getting actual num modules: %s\n", err)
return res
}
if expectNumModules != actualNumModules {
res += fmt.Sprintf("MODULE COUNT ERROR: expected %d, got %d\n", expectNumModules, actualNumModules)
}
for expectedMod, err := range expected.Modules {
if err != nil {
res += fmt.Sprintf("ERROR getting expected module: %s\n", err)
continue
}
moduleName := expectedMod.ModuleName()
actualMod, err := actual.GetModule(moduleName)
if err != nil {
res += fmt.Sprintf("ERROR getting actual module: %s\n", err)
continue
}
if actualMod == nil {
res += fmt.Sprintf("Module %s: actual module NOT FOUND\n", moduleName)
continue
}
diff := DiffModuleStates(expectedMod, actualMod)
if diff != "" {
res += "Module " + moduleName + "\n"
res += indentAllLines(diff)
}
}
return res
}