blob: 414933782dd8c00ed7f68cb33d84edc1c29878f8 [file] [log] [blame] [edit]
package experiments
import (
"testing"
)
// OverrideForTesting temporarily overrides the global tables
// of experiments in order to allow for a predictable set when unit testing
// the experiments infrastructure code.
//
// The correct way to use this function is to defer a call to its result so
// that the original tables can be restored at the conclusion of the calling
// test:
//
// defer experiments.OverrideForTesting(t, current, concluded)()
//
// This function modifies global variables that are normally fixed throughout
// our execution, so this function must not be called from non-test code and
// any test using it cannot safely run concurrently with other tests.
func OverrideForTesting(t *testing.T, current Set, concluded map[Experiment]string) func() {
// We're not currently using the given *testing.T in here, but we're
// requiring it anyway in case we might need it in future, and because
// it hopefully reinforces that only test code should be calling this.
realCurrents := currentExperiments
realConcludeds := concludedExperiments
currentExperiments = current
concludedExperiments = concluded
return func() {
currentExperiments = realCurrents
concludedExperiments = realConcludeds
}
}