Skip to content

Commit

Permalink
add unit tests for better coverage
Browse files Browse the repository at this point in the history
Signed-off-by: Rayhan Hossain <hossain.rayhan@outlook.com>
  • Loading branch information
hossain-rayhan committed Dec 2, 2020
1 parent a23d5f5 commit c1aa100
Show file tree
Hide file tree
Showing 5 changed files with 359 additions and 117 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,18 @@ import (
"testing"

"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/consumer/pdata"
"go.uber.org/zap"
)

func TestGetMetricsData(t *testing.T) {
v := uint64(1)
f := 1.0
var (
v = uint64(1)
f = 1.0
floatZero = float64(0)
logger = zap.NewNop()

memStats := make(map[string]uint64)
memStats["cache"] = v
memStats = map[string]uint64{"cache": v}

mem := MemoryStats{
mem = MemoryStats{
Usage: &v,
MaxUsage: &v,
Limit: &v,
Expand All @@ -37,16 +38,15 @@ func TestGetMetricsData(t *testing.T) {
Stats: memStats,
}

disk := DiskStats{
disk = DiskStats{
IoServiceBytesRecursives: []IoServiceBytesRecursive{
{Op: "Read", Value: &v},
{Op: "Write", Value: &v},
{Op: "Total", Value: &v},
},
}

net := make(map[string]NetworkStats)
net["eth0"] = NetworkStats{
networkStat = NetworkStats{
RxBytes: &v,
RxPackets: &v,
RxErrors: &v,
Expand All @@ -56,38 +56,39 @@ func TestGetMetricsData(t *testing.T) {
TxErrors: &v,
TxDropped: &v,
}
net = map[string]NetworkStats{"eth0": networkStat}

netRate := NetworkRateStats{
netRate = NetworkRateStats{
RxBytesPerSecond: &f,
TxBytesPerSecond: &f,
}

percpu := []*uint64{&v, &v}
cpuUsage := CPUUsage{
percpu = []*uint64{&v, &v}
cpuUsage = CPUUsage{
TotalUsage: &v,
UsageInKernelmode: &v,
UsageInUserMode: &v,
PerCPUUsage: percpu,
}

cpuStats := CPUStats{
CPUUsage: cpuUsage,
cpuStats = CPUStats{
CPUUsage: &cpuUsage,
OnlineCpus: &v,
SystemCPUUsage: &v,
CPUUtilized: &v,
CPUReserved: &v,
}
containerStats := ContainerStats{
containerStats = ContainerStats{
Name: "test",
ID: "001",
Memory: mem,
Disk: disk,
Memory: &mem,
Disk: &disk,
Network: net,
NetworkRate: netRate,
CPU: cpuStats,
NetworkRate: &netRate,
CPU: &cpuStats,
}

tm := TaskMetadata{
tm = TaskMetadata{
Cluster: "cluster-1",
TaskARN: "arn:aws:some-value/001",
Family: "task-def-family-1",
Expand All @@ -98,15 +99,118 @@ func TestGetMetricsData(t *testing.T) {
Limits: Limit{CPU: &f, Memory: &v},
}

cstats := make(map[string]ContainerStats)
cstats["001"] = containerStats
cstats = map[string]*ContainerStats{"001": &containerStats}
acc = metricDataAccumulator{
mds: nil,
}
)

func TestGetMetricsDataAllValid(t *testing.T) {
acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataMissingContainerStats(t *testing.T) {
tm.Containers = []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001-Missing", DockerName: "docker-container-1", Limits: Limit{CPU: &f, Memory: &v}},
}
acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

var md []pdata.Metrics
func TestGetMetricsDataNilContainerStats(t *testing.T) {
cstats = map[string]*ContainerStats{"001": nil}

acc := metricDataAccumulator{
mds: md,
acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataMissingContainerLimit(t *testing.T) {
tm.Containers = []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1"},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataContainerLimitCpuNil(t *testing.T) {
tm.Containers = []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: nil, Memory: &v}},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataContainerLimitMemoryNil(t *testing.T) {
tm.Containers = []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: &f, Memory: nil}},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataMissingTaskLimit(t *testing.T) {
tm = TaskMetadata{
Cluster: "cluster-1",
TaskARN: "arn:aws:some-value/001",
Family: "task-def-family-1",
Revision: "task-def-version",
Containers: []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: &f, Memory: &v}},
},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataTaskLimitCpuNil(t *testing.T) {
tm = TaskMetadata{
Cluster: "cluster-1",
TaskARN: "arn:aws:some-value/001",
Family: "task-def-family-1",
Revision: "task-def-version",
Containers: []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: &f, Memory: &v}},
},
Limits: Limit{CPU: nil, Memory: &v},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataTaskLimitMemoryNil(t *testing.T) {
tm = TaskMetadata{
Cluster: "cluster-1",
TaskARN: "arn:aws:some-value/001",
Family: "task-def-family-1",
Revision: "task-def-version",
Containers: []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: &f, Memory: &v}},
},
Limits: Limit{CPU: &f, Memory: nil},
}

acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}

func TestGetMetricsDataCpuReservedZero(t *testing.T) {
tm = TaskMetadata{
Cluster: "cluster-1",
TaskARN: "arn:aws:some-value/001",
Family: "task-def-family-1",
Revision: "task-def-version",
Containers: []ContainerMetadata{
{ContainerName: "container-1", DockerID: "001", DockerName: "docker-container-1", Limits: Limit{CPU: &floatZero, Memory: nil}},
},
Limits: Limit{CPU: &floatZero, Memory: &v},
}

acc.getMetricsData(cstats, tm)
acc.getMetricsData(cstats, tm, logger)
require.Less(t, 0, len(acc.mds))
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ type MemoryStats struct {

// DiskStats defines the storage stats
type DiskStats struct {
IoServiceBytesRecursives []*IoServiceBytesRecursive `json:"io_service_bytes_recursive,omitempty"`
IoServiceBytesRecursives []IoServiceBytesRecursive `json:"io_service_bytes_recursive,omitempty"`
}

//IoServiceBytesRecursive defines the IO device stats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func getContainerMetrics(stats *ContainerStats, logger *zap.Logger) ECSMetrics {
m.MemoryUtilized = (*stats.Memory.Usage - stats.Memory.Stats["cache"]) / BytesInMiB
}
} else {
logger.Warn("Nil memory stats found for docker container:" + stats.Name)
logger.Debug("Nil memory stats found for docker container:" + stats.Name)
}

if stats.CPU != nil && stats.CPU.CPUUsage != nil {
Expand All @@ -52,14 +52,14 @@ func getContainerMetrics(stats *ContainerStats, logger *zap.Logger) ECSMetrics {
m.CPUUsageInVCPU = cpuUsageInVCpu
m.CPUUtilized = cpuUtilized
} else {
logger.Warn("Nil CPUUsage stats found for docker container:" + stats.Name)
logger.Debug("Nil CPUUsage stats found for docker container:" + stats.Name)
}

if stats.NetworkRate != nil {
m.NetworkRateRxBytesPerSecond = *stats.NetworkRate.RxBytesPerSecond
m.NetworkRateTxBytesPerSecond = *stats.NetworkRate.TxBytesPerSecond
} else {
logger.Warn("Nil NetworkRate stats found for docker container:" + stats.Name)
logger.Debug("Nil NetworkRate stats found for docker container:" + stats.Name)
}

if stats.Network != nil {
Expand All @@ -75,7 +75,7 @@ func getContainerMetrics(stats *ContainerStats, logger *zap.Logger) ECSMetrics {
m.NetworkTxErrors = netStatArray[6]
m.NetworkTxDropped = netStatArray[7]
} else {
logger.Warn("Nil Network stats found for docker container:" + stats.Name)
logger.Debug("Nil Network stats found for docker container:" + stats.Name)
}

if stats.Disk != nil {
Expand Down
Loading

0 comments on commit c1aa100

Please sign in to comment.