mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-24 01:41:42 +00:00

I added yet another one in 6d117d64a256234 but that new one is at the best place int he dependency graph and has the best name, so let's use that one for everything possible. types/lazy can't use it for circular dependency reasons, so unexport that copy at least. Updates #cleanup Change-Id: I25db6b6a0d81dbb8e89a0a9080c7f15cbf7aa770 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Package internal contains miscellaneous functions and types
|
|
// that are internal to the syspolicy packages.
|
|
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"github.com/go-json-experiment/json/jsontext"
|
|
"tailscale.com/types/lazy"
|
|
"tailscale.com/util/testenv"
|
|
"tailscale.com/version"
|
|
)
|
|
|
|
// Init facilitates deferred invocation of initializers.
|
|
var Init lazy.DeferredInit
|
|
|
|
// OSForTesting is the operating system override used for testing.
|
|
// It follows the same naming convention as [version.OS].
|
|
var OSForTesting lazy.SyncValue[string]
|
|
|
|
// OS is like [version.OS], but supports a test hook.
|
|
func OS() string {
|
|
return OSForTesting.Get(version.OS)
|
|
}
|
|
|
|
// EqualJSONForTest compares the JSON in j1 and j2 for semantic equality.
|
|
// It returns "", "", true if j1 and j2 are equal. Otherwise, it returns
|
|
// indented versions of j1 and j2 and false.
|
|
func EqualJSONForTest(tb testenv.TB, j1, j2 jsontext.Value) (s1, s2 string, equal bool) {
|
|
tb.Helper()
|
|
j1 = j1.Clone()
|
|
j2 = j2.Clone()
|
|
// Canonicalize JSON values for comparison.
|
|
if err := j1.Canonicalize(); err != nil {
|
|
tb.Error(err)
|
|
}
|
|
if err := j2.Canonicalize(); err != nil {
|
|
tb.Error(err)
|
|
}
|
|
// Check and return true if the two values are structurally equal.
|
|
if bytes.Equal(j1, j2) {
|
|
return "", "", true
|
|
}
|
|
// Otherwise, format the values for display and return false.
|
|
if err := j1.Indent(); err != nil {
|
|
tb.Fatal(err)
|
|
}
|
|
if err := j2.Indent(); err != nil {
|
|
tb.Fatal(err)
|
|
}
|
|
return j1.String(), j2.String(), false
|
|
}
|