Skip to content

Commit

Permalink
Add Unit Test to common
Browse files Browse the repository at this point in the history
Produces a package coverage of ~80%
  • Loading branch information
mulbc committed Aug 20, 2019
1 parent b3c76cc commit 8af3235
Showing 1 changed file with 301 additions and 0 deletions.
301 changes: 301 additions & 0 deletions common/configFile_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,301 @@
package common

import (
"testing"
"time"
)

func Test_checkTestCase(t *testing.T) {
type args struct {
testcase *TestCaseConfiguration
}
tests := []struct {
name string
args args
wantErr bool
}{
{"No end defined", args{new(TestCaseConfiguration)}, true},
{"No weights defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10}}, true},
{"No Bucket Numbers defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1}}, true},
{"No Object size min defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
}}}, true},
{"No Object size max defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
}}}, true},
{"No Object number min defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
}}}, true},
{"No Object size distributions defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
}}}, true},
{"No Object number distributions defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
SizeDistribution: "constant",
}}}, true},
{"No Bucket distribution defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
SizeDistribution: "constant",
NumberDistribution: "constant",
}}}, true},
{"No Object Unit defined", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
NumberDistribution: "constant",
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
SizeDistribution: "constant",
NumberDistribution: "constant",
}}}, true},
{"Wrong object unit", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
NumberDistribution: "constant",
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
SizeDistribution: "constant",
NumberDistribution: "constant",
Unit: "XB",
}}}, true},
{"All good", args{&TestCaseConfiguration{Runtime: time.Second, OpsDeadline: 10, ReadWeight: 1,
Buckets: struct {
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
}{
NumberMin: 1,
NumberDistribution: "constant",
},
Objects: struct {
SizeMin uint64 `yaml:"size_min"`
SizeMax uint64 `yaml:"size_max"`
PartSize uint64 `yaml:"part_size"`
SizeLast uint64
SizeDistribution string `yaml:"size_distribution"`
NumberMin uint64 `yaml:"number_min"`
NumberMax uint64 `yaml:"number_max"`
NumberLast uint64
NumberDistribution string `yaml:"number_distribution"`
Unit string `yaml:"unit"`
}{
SizeMin: 1,
SizeMax: 2,
NumberMin: 3,
SizeDistribution: "constant",
NumberDistribution: "constant",
Unit: "KB",
}}}, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := checkTestCase(tt.args.testcase); (err != nil) != tt.wantErr {
t.Errorf("checkTestCase() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}

func Test_checkDistribution(t *testing.T) {
type args struct {
distribution string
keyname string
}
tests := []struct {
name string
args args
wantErr bool
}{
{"constant distribution", args{"constant", "test"}, false},
{"random distribution", args{"random", "test"}, false},
{"sequential distribution", args{"sequential", "test"}, false},
{"wrong distribution", args{"wrong", "test"}, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := checkDistribution(tt.args.distribution, tt.args.keyname); (err != nil) != tt.wantErr {
t.Errorf("checkDistribution() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}

func TestEvaluateDistribution(t *testing.T) {
type args struct {
min uint64
max uint64
lastNumber *uint64
increment uint64
distribution string
}
lastArgumentNumber := uint64(1)
tests := []struct {
name string
args args
want uint64
}{
{"constant distribution", args{5, 100, &lastArgumentNumber, 1, "constant"}, 5},
{"random distribution", args{1, 2, &lastArgumentNumber, 1, "random"}, 1},
{"sequential distribution", args{1, 10, &lastArgumentNumber, 1, "sequential"}, 2},
{"last number in sequential distribution", args{1, 10, &lastArgumentNumber, 10, "sequential"}, 10},
{"wrong distribution", args{1, 10, &lastArgumentNumber, 1, "wrong"}, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := EvaluateDistribution(tt.args.min, tt.args.max, tt.args.lastNumber, tt.args.increment, tt.args.distribution); got != tt.want {
t.Errorf("EvaluateDistribution() = %v, want %v", got, tt.want)
}
})
}
}

0 comments on commit 8af3235

Please sign in to comment.