119 lines
3.5 KiB
Go
119 lines
3.5 KiB
Go
package stats
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func getJSONData() jsonData {
|
|
processes := []Process{{Name: "test", Pid: 1, CPU: 0.1}}
|
|
return jsonData{Date: "2020-08-19T15:18:06+02:00", Mem: Memory{Used: 100, Total: 1000}, Disk: Memory{Used: 1000, Total: 10000}, CPU: 0.1, Processes: processes}
|
|
}
|
|
|
|
func TestTransformation(t *testing.T) {
|
|
|
|
t.Run("should transform iso date string into a time struct", func(t *testing.T) {
|
|
want := getJSONData().Date
|
|
got, err := getJSONData().transformToData()
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, want, got.Date.Format(time.RFC3339))
|
|
})
|
|
|
|
t.Run("should wrap transforming iso date error", func(t *testing.T) {
|
|
wrongDateJSONData := getJSONData()
|
|
wrongDateJSONData.Date = "2020-08-19T15:18:06+02:00xxx"
|
|
|
|
want := "transforming jsonData to Data: parsing the json Date string produced an error: parsing time \"2020-08-19T15:18:06+02:00xxx\": extra text: \"xxx\""
|
|
_, got := wrongDateJSONData.transformToData()
|
|
|
|
require.Equal(t, want, got.Error())
|
|
})
|
|
|
|
t.Run("should transform mem string into Memory struct", func(t *testing.T) {
|
|
want := Memory{Used: 100, Total: 1000}
|
|
got, err := getJSONData().transformToData()
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, want, got.Mem)
|
|
})
|
|
|
|
t.Run("should transform disk string into Memory struct", func(t *testing.T) {
|
|
want := Memory{Used: 1000, Total: 10000}
|
|
got, err := getJSONData().transformToData()
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, want, got.Disk)
|
|
})
|
|
|
|
t.Run("should add CPU", func(t *testing.T) {
|
|
want := getJSONData().CPU
|
|
got, err := getJSONData().transformToData()
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, want, got.CPU)
|
|
})
|
|
|
|
t.Run("should add Processes", func(t *testing.T) {
|
|
want := getJSONData().Processes
|
|
got, err := getJSONData().transformToData()
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, want, got.Processes)
|
|
})
|
|
}
|
|
|
|
func TestParseISODateString(t *testing.T) {
|
|
t.Run("should parse correct formatted string", func(t *testing.T) {
|
|
currentTime := time.Now().Format(time.RFC3339)
|
|
|
|
want := currentTime
|
|
got, err := jsonData{Date: currentTime}.parseDateToTime()
|
|
if err != nil {
|
|
t.Errorf("An unexpected error happened: %s", err.Error())
|
|
}
|
|
|
|
require.Equal(t, want, got.Format(time.RFC3339))
|
|
})
|
|
|
|
t.Run("should return error on wrong string", func(t *testing.T) {
|
|
currentTime := "2020-08-19T15:18:06+02:00xxx"
|
|
|
|
want := "parsing the json Date string produced an error: parsing time \"2020-08-19T15:18:06+02:00xxx\": extra text: \"xxx\""
|
|
_, err := jsonData{Date: currentTime}.parseDateToTime()
|
|
|
|
require.NotNil(t, err)
|
|
require.Equal(t, want, err.Error())
|
|
})
|
|
}
|
|
|
|
func TestParseMemoryString(t *testing.T) {
|
|
t.Run("should build a Memory struct from a valid/simple string", func(t *testing.T) {
|
|
want := Memory{Used: 100, Total: 1000}
|
|
got, err := jsonData{}.parseMemoryString("100/1000")
|
|
if err != nil {
|
|
t.Errorf("An unexpected error happened: %s", err.Error())
|
|
}
|
|
|
|
require.Equal(t, want, got)
|
|
})
|
|
|
|
t.Run("should return error if not seperated by a slash", func(t *testing.T) {
|
|
want := "the string is missing the separating slash like 100/1000: 100 1000"
|
|
_, err := jsonData{}.parseMemoryString("100 1000")
|
|
|
|
require.NotNil(t, err)
|
|
require.Equal(t, want, err.Error())
|
|
})
|
|
|
|
t.Run("should return error if not seperated by a slash", func(t *testing.T) {
|
|
want := "parsing parts of a the string for the Memory struct: strconv.ParseInt: parsing \"foo\": invalid syntax"
|
|
_, err := jsonData{}.parseMemoryString("foo/1000")
|
|
|
|
require.NotNil(t, err)
|
|
require.Equal(t, want, err.Error())
|
|
})
|
|
}
|