2020-08-17 08:31:59 +02:00
package stats
import (
"testing"
"time"
2020-11-17 17:23:54 +01:00
"github.com/stretchr/testify/require"
2020-08-17 08:31:59 +02:00
)
2020-08-19 17:30:51 +02:00
func getJSONData ( ) jsonData {
2020-08-19 17:37:06 +02:00
processes := [ ] Process { { Name : "test" , Pid : 1 , CPU : 0.1 } }
2020-11-06 09:46:21 +01:00
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 }
2020-08-19 17:30:51 +02:00
}
2020-08-17 08:31:59 +02:00
func TestTransformation ( t * testing . T ) {
2020-08-19 17:30:51 +02:00
t . Run ( "should transform iso date string into a time struct" , func ( t * testing . T ) {
want := getJSONData ( ) . Date
got , err := getJSONData ( ) . transformToData ( )
2020-08-17 08:31:59 +02:00
2020-11-17 17:23:54 +01:00
require . Nil ( t , err )
require . Equal ( t , want , got . Date . Format ( time . RFC3339 ) )
2020-08-17 08:31:59 +02:00
} )
2020-08-19 17:30:51 +02:00
t . Run ( "should wrap transforming iso date error" , func ( t * testing . T ) {
wrongDateJSONData := getJSONData ( )
wrongDateJSONData . Date = "2020-08-19T15:18:06+02:00xxx"
2020-08-24 18:18:34 +02:00
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\""
2020-08-19 17:30:51 +02:00
_ , got := wrongDateJSONData . transformToData ( )
2020-11-17 17:23:54 +01:00
require . Equal ( t , want , got . Error ( ) )
2020-08-19 17:30:51 +02:00
} )
t . Run ( "should transform mem string into Memory struct" , func ( t * testing . T ) {
want := Memory { Used : 100 , Total : 1000 }
got , err := getJSONData ( ) . transformToData ( )
2020-11-17 17:23:54 +01:00
require . Nil ( t , err )
require . Equal ( t , want , got . Mem )
2020-08-19 17:30:51 +02:00
} )
t . Run ( "should transform disk string into Memory struct" , func ( t * testing . T ) {
want := Memory { Used : 1000 , Total : 10000 }
got , err := getJSONData ( ) . transformToData ( )
2020-11-17 17:23:54 +01:00
require . Nil ( t , err )
require . Equal ( t , want , got . Disk )
2020-08-19 17:30:51 +02:00
} )
2020-08-19 17:37:06 +02:00
t . Run ( "should add CPU" , func ( t * testing . T ) {
want := getJSONData ( ) . CPU
got , err := getJSONData ( ) . transformToData ( )
2020-11-17 17:23:54 +01:00
require . Nil ( t , err )
require . Equal ( t , want , got . CPU )
2020-08-19 17:37:06 +02:00
} )
t . Run ( "should add Processes" , func ( t * testing . T ) {
want := getJSONData ( ) . Processes
got , err := getJSONData ( ) . transformToData ( )
2020-11-17 17:23:54 +01:00
require . Nil ( t , err )
require . Equal ( t , want , got . Processes )
2020-08-19 17:37:06 +02:00
} )
2020-08-17 08:31:59 +02:00
}
func TestParseISODateString ( t * testing . T ) {
t . Run ( "should parse correct formatted string" , func ( t * testing . T ) {
currentTime := time . Now ( ) . Format ( time . RFC3339 )
want := currentTime
2020-08-19 16:40:46 +02:00
got , err := jsonData { Date : currentTime } . parseDateToTime ( )
2020-08-17 08:31:59 +02:00
if err != nil {
t . Errorf ( "An unexpected error happened: %s" , err . Error ( ) )
}
2020-11-17 17:23:54 +01:00
require . Equal ( t , want , got . Format ( time . RFC3339 ) )
2020-08-17 08:31:59 +02:00
} )
t . Run ( "should return error on wrong string" , func ( t * testing . T ) {
currentTime := "2020-08-19T15:18:06+02:00xxx"
2020-08-24 18:18:34 +02:00
want := "parsing the json Date string produced an error: parsing time \"2020-08-19T15:18:06+02:00xxx\": extra text: \"xxx\""
2020-08-19 16:40:46 +02:00
_ , err := jsonData { Date : currentTime } . parseDateToTime ( )
2020-08-17 08:31:59 +02:00
2020-11-17 17:23:54 +01:00
require . NotNil ( t , err )
require . Equal ( t , want , err . Error ( ) )
2020-08-17 08:31:59 +02:00
} )
}
2020-08-19 16:40:46 +02:00
func TestParseMemoryString ( t * testing . T ) {
2020-08-19 17:30:51 +02:00
t . Run ( "should build a Memory struct from a valid/simple string" , func ( t * testing . T ) {
2020-08-19 16:36:31 +02:00
want := Memory { Used : 100 , Total : 1000 }
got , err := jsonData { } . parseMemoryString ( "100/1000" )
2020-08-17 08:31:59 +02:00
if err != nil {
t . Errorf ( "An unexpected error happened: %s" , err . Error ( ) )
}
2020-11-17 17:23:54 +01:00
require . Equal ( t , want , got )
2020-08-17 08:31:59 +02:00
} )
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"
2020-08-19 16:36:31 +02:00
_ , err := jsonData { } . parseMemoryString ( "100 1000" )
2020-08-17 08:31:59 +02:00
2020-11-17 17:23:54 +01:00
require . NotNil ( t , err )
require . Equal ( t , want , err . Error ( ) )
2020-08-17 08:31:59 +02:00
} )
t . Run ( "should return error if not seperated by a slash" , func ( t * testing . T ) {
2020-08-19 16:36:31 +02:00
want := "parsing parts of a the string for the Memory struct: strconv.ParseInt: parsing \"foo\": invalid syntax"
_ , err := jsonData { } . parseMemoryString ( "foo/1000" )
2020-08-17 08:31:59 +02:00
2020-11-17 17:23:54 +01:00
require . NotNil ( t , err )
require . Equal ( t , want , err . Error ( ) )
2020-08-17 08:31:59 +02:00
} )
}