package goldenfiles import ( "bytes" "encoding/json" "fmt" "os" "path/filepath" "strings" "testing" "github.com/go-flucky/flucky/pkg/storage/logfile" "github.com/go-flucky/flucky/pkg/types" "github.com/stretchr/testify/require" ) func CompareMeasuredValues(t *testing.T, goldenInterface interface{}, testInterface interface{}) { require := require.New(t) goldenBuffer := new(bytes.Buffer) testBuffer := new(bytes.Buffer) jsonEncoder := json.NewEncoder(goldenBuffer) jsonEncoder.SetIndent("", " ") err := jsonEncoder.Encode(&goldenInterface) require.NoError(err) jsonEncoder = json.NewEncoder(testBuffer) jsonEncoder.SetIndent("", " ") err = jsonEncoder.Encode(&testInterface) require.NoError(err) // t.Log(goldenBuffer.String(), testBuffer.String()) require.Equal(goldenBuffer.String(), testBuffer.String(), "Expected are not equal with actual value") } func GetGoldenDevices(goldenFilePath string) ([]*types.Device, error) { file := string(MustAsset(goldenFilePath)) reader := strings.NewReader(file) devices := make([]*types.Device, 0) jsonDecoder := json.NewDecoder(reader) err := jsonDecoder.Decode(&devices) if err != nil { return nil, err } return devices, nil } func GetGoldenMeasuredValues(goldenFilePath string) ([]*types.MeasuredValue, error) { tempDir := os.TempDir() if err := os.MkdirAll(tempDir, 0755); err != nil { return nil, fmt.Errorf("Can not create temp directory %v: %v", tempDir, err) } tempLogfile := filepath.Join(tempDir, fmt.Sprintf("logfile %v", filepath.Ext(goldenFilePath))) f, err := os.Create(tempLogfile) if err != nil { return nil, fmt.Errorf("Can not create temporary logfile %v: %v", tempLogfile, err) } defer os.Remove(tempLogfile) _, err = f.Write(MustAsset(goldenFilePath)) if err != nil { return nil, fmt.Errorf("Can not write into file %v: %v", tempLogfile, err) } logfile := logfile.New(tempLogfile) return logfile.Read() } func GetGoldenSensors(goldenFilePath string) ([]*types.Sensor, error) { f := string(MustAsset(goldenFilePath)) r := strings.NewReader(f) sensors := make([]*types.Sensor, 0) jsonDecoder := json.NewDecoder(r) err := jsonDecoder.Decode(&sensors) if err != nil { return nil, err } return sensors, nil }