package libpod

import (
	"fmt"
	"testing"

	"github.com/containers/podman/v4/libpod/define"
	"github.com/stretchr/testify/assert"
)

func Test_statToPercent(t *testing.T) {
	type args struct {
		in0 []string
	}
	tests := []struct {
		name    string
		args    args
		want    *define.CPUUsage
		wantErr assert.ErrorAssertionFunc
	}{
		{
			name: "GoodParse",
			args: args{in0: []string{"cpu", "33628064", "27537", "9696996", "1314806705", "588142", "4775073", "2789228", "0", "598711", "0"}},
			want: &define.CPUUsage{
				UserPercent:   2.48,
				SystemPercent: 0.71,
				IdlePercent:   96.81,
			},
			wantErr: assert.NoError,
		},
		{
			name:    "BadUserValue",
			args:    args{in0: []string{"cpu", "k", "27537", "9696996", "1314806705", "588142", "4775073", "2789228", "0", "598711", "0"}},
			want:    nil,
			wantErr: assert.Error,
		},
		{
			name:    "BadSystemValue",
			args:    args{in0: []string{"cpu", "33628064", "27537", "k", "1314806705", "588142", "4775073", "2789228", "0", "598711", "0"}},
			want:    nil,
			wantErr: assert.Error,
		},
		{
			name:    "BadIdleValue",
			args:    args{in0: []string{"cpu", "33628064", "27537", "9696996", "k", "588142", "4775073", "2789228", "0", "598711", "0"}},
			want:    nil,
			wantErr: assert.Error,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got, err := statToPercent(tt.args.in0)
			if !tt.wantErr(t, err, fmt.Sprintf("statToPercent(%v)", tt.args.in0)) {
				return
			}
			assert.Equalf(t, tt.want, got, "statToPercent(%v)", tt.args.in0)
		})
	}
}
