Ctrl K
ComunidadGuías…

tunnel/health/checks_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package health

import (
	"bytes"
	"encoding/json"
	"testing"
	"time"

	"github.com/mitchellh/mapstructure"
	"github.com/stretchr/testify/require"
)

func Test_LoadPingTest(t *testing.T) {
	req := require.New(t)

	var test = `
        {
            "type" : "port-check",
            "interval" : "10s",
            "address" : "localhost:5554",
			"actions": [
				{
					"action": "mark unhealthy",
					"consecutiveEvents": 10,
					"trigger": "fail"
				},
				{
					"action": "increase cost 100",
					"trigger": "fail"
				},
				{
					"action": "mark healthy",
					"duration": "1m",
					"trigger": "pass"
				},
				{
					"action": "decrease cost 5",
					"trigger": "pass"
				}
			]
        }`

	buf := bytes.NewBufferString(test)
	d := json.NewDecoder(buf)

	m := map[string]interface{}{}
	req.NoError(d.Decode(&m))

	pingCheck := &PortCheckDefinition{}
	decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
		Result:     pingCheck,
		DecodeHook: mapstructure.StringToTimeDurationHookFunc(),
	})
	req.NoError(err)
	req.NoError(decoder.Decode(m))

	req.Equal(pingCheck.Address, "localhost:5554")
	req.Equal(10*time.Second, pingCheck.Interval)
	req.NotNil(pingCheck.Actions)
	req.Equal(4, len(pingCheck.Actions))

	req.Equal("fail", pingCheck.Actions[0].Trigger)
	req.NotNil(pingCheck.Actions[0].ConsecutiveEvents)
	req.Equal(uint16(10), *pingCheck.Actions[0].ConsecutiveEvents)
	req.Nil(pingCheck.Actions[0].Duration)
	req.Equal("mark unhealthy", pingCheck.Actions[0].Action)

	req.Equal("fail", pingCheck.Actions[1].Trigger)
	req.Nil(pingCheck.Actions[1].ConsecutiveEvents)
	req.Nil(pingCheck.Actions[1].Duration)
	req.Equal("increase cost 100", pingCheck.Actions[1].Action)

	req.Equal("pass", pingCheck.Actions[2].Trigger)
	req.Nil(pingCheck.Actions[2].ConsecutiveEvents)
	req.NotNil(pingCheck.Actions[2].Duration)
	req.Equal(time.Minute, *pingCheck.Actions[2].Duration)
	req.Equal("mark healthy", pingCheck.Actions[2].Action)

	req.Equal("pass", pingCheck.Actions[3].Trigger)
	req.Nil(pingCheck.Actions[3].ConsecutiveEvents)
	req.Nil(pingCheck.Actions[3].Duration)
	req.Equal("decrease cost 5", pingCheck.Actions[3].Action)
}