Skip to content
Snippets Groups Projects
metric_heartbeat_test.go 1.24 KiB
package packet

import (
	"crypto/sha256"
	"runtime"
	"testing"
	"time"

	"github.com/iotaledger/hive.go/protocol/message"
	"github.com/iotaledger/hive.go/protocol/tlv"
	"github.com/shirou/gopsutil/cpu"
	"github.com/stretchr/testify/require"
)

var nodeID = sha256.Sum256([]byte{'A'})

func testMetricHeartbeat() *MetricHeartbeat {
	return &MetricHeartbeat{
		OwnID:  nodeID[:],
		OS:     runtime.GOOS,
		Arch:   runtime.GOARCH,
		NumCPU: runtime.NumCPU(),
		CPUUsage: func() (p float64) {
			percent, err := cpu.Percent(time.Second, false)
			if err == nil {
				p = percent[0]
			}
			return
		}(),
		MemoryUsage: func() uint64 {
			var m runtime.MemStats
			runtime.ReadMemStats(&m)
			return m.Alloc
		}(),
	}
}

func TestMetricHeartbeat(t *testing.T) {
	hb := testMetricHeartbeat()

	packet, err := hb.Bytes()
	require.NoError(t, err)

	hbParsed, err := ParseMetricHeartbeat(packet)
	require.NoError(t, err)

	require.Equal(t, hb, hbParsed)

	tlvHeaderLength := int(tlv.HeaderMessageDefinition.MaxBytesLength)
	msg, err := NewMetricHeartbeatMessage(hb)
	require.NoError(t, err)

	require.Equal(t, MessageTypeMetricHeartbeat, message.Type(msg[0]))

	hbParsed, err = ParseMetricHeartbeat(msg[tlvHeaderLength:])
	require.NoError(t, err)
	require.Equal(t, hb, hbParsed)
}