File: exec_test.go

package info (click to toggle)
golang-collectd 0.3.0%2Bgit20181025.f80706d-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 312 kB
  • sloc: makefile: 3
file content (88 lines) | stat: -rw-r--r-- 1,833 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package exec // import "collectd.org/exec"

import (
	"context"
	"os"
	"testing"
	"time"

	"collectd.org/api"
)

func TestSanitizeInterval(t *testing.T) {
	var got, want time.Duration

	got = sanitizeInterval(10 * time.Second)
	want = 10 * time.Second
	if got != want {
		t.Errorf("got %v, want %v", got, want)
	}

	// Environment with seconds
	if err := os.Setenv("COLLECTD_INTERVAL", "42"); err != nil {
		t.Fatalf("os.Setenv: %v", err)
	}
	got = sanitizeInterval(0)
	want = 42 * time.Second
	if got != want {
		t.Errorf("got %v, want %v", got, want)
	}

	// Environment with milliseconds
	if err := os.Setenv("COLLECTD_INTERVAL", "31.337"); err != nil {
		t.Fatalf("os.Setenv: %v", err)
	}
	got = sanitizeInterval(0)
	want = 31337 * time.Millisecond
	if got != want {
		t.Errorf("got %v, want %v", got, want)
	}
}

func Example() {
	e := NewExecutor()

	// simple "value" callback
	answer := func() api.Value {
		return api.Gauge(42)
	}
	e.ValueCallback(answer, &api.ValueList{
		Identifier: api.Identifier{
			Host:         "example.com",
			Plugin:       "golang",
			Type:         "answer",
			TypeInstance: "live_universe_and_everything",
		},
		Interval: time.Second,
	})

	// "complex" void callback
	bicycles := func(ctx context.Context, interval time.Duration) {
		vl := &api.ValueList{
			Identifier: api.Identifier{
				Host:   "example.com",
				Plugin: "golang",
				Type:   "bicycles",
			},
			Interval: interval,
			Time:     time.Now(),
			Values:   make([]api.Value, 1),
		}

		data := []struct {
			TypeInstance string
			Value        api.Gauge
		}{
			{"beijing", api.Gauge(9000000)},
		}
		for _, d := range data {
			vl.Values[0] = d.Value
			vl.Identifier.TypeInstance = d.TypeInstance
			Putval.Write(ctx, vl)
		}
	}
	e.VoidCallback(bicycles, time.Second)

	// blocks forever
	e.Run(context.Background())
}