File: supervisor_test.go

package info (click to toggle)
golang-github-containerd-nydus-snapshotter 0.13.4-2.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,824 kB
  • sloc: sh: 470; makefile: 129
file content (99 lines) | stat: -rw-r--r-- 2,122 bytes parent folder | download
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
89
90
91
92
93
94
95
96
97
98
99
/*
 * Copyright (c) 2022. Nydus Developers. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

package supervisor

import (
	"net"
	"os"
	"reflect"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"golang.org/x/sys/unix"
)

func TestSupervisor(t *testing.T) {
	rootDir, err1 := os.MkdirTemp("", "supervisor")
	assert.Nil(t, err1)

	t.Cleanup(func() {
		os.RemoveAll(rootDir)
	})

	supervisorSet, err := NewSupervisorSet(rootDir)
	assert.Nil(t, err, "%v", err)

	su1 := supervisorSet.NewSupervisor("su1")
	assert.NotNil(t, su1)

	_, err = su1.waitStatesTimeout(2 * time.Second)
	assert.Nil(t, err, "%v", err)
	sock := su1.Sock()

	addr, err := net.ResolveUnixAddr("unix", sock)
	assert.Nil(t, err)

	conn, err := net.DialUnix("unix", nil, addr)
	assert.Nil(t, err, "%v", err)

	sentData := []byte("abcde")

	sentLen, err := conn.Write(sentData)
	assert.Nil(t, err)

	conn.Close()

	// FIXME: Delay for some time until states are stored
	time.Sleep(500 * time.Millisecond)

	// Must set length not only capacity
	receivedData := make([]byte, 16, 32)
	oob := make([]byte, 16, 32)
	err = su1.SendStatesTimeout(0)
	assert.Nil(t, err, "%v", err)

	conn1, err := net.DialUnix("unix", nil, addr)
	assert.Nil(t, err, "%v", err)

	f, _ := conn1.File()

	//nolint:dogsled
	receivedLen, _, _, _, err := unix.Recvmsg(int(f.Fd()), receivedData, oob, 0)
	assert.Nil(t, err)

	assert.Equal(t, sentLen, receivedLen)
	assert.True(t, reflect.DeepEqual(receivedData[:receivedLen], sentData), "%v", receivedData)

}

func TestSupervisorTimeout(t *testing.T) {
	rootDir, err1 := os.MkdirTemp("", "supervisor")
	assert.Nil(t, err1)

	t.Cleanup(func() {
		os.RemoveAll(rootDir)
	})

	supervisorSet, err := NewSupervisorSet(rootDir)
	assert.Nil(t, err, "%v", err)

	su1 := supervisorSet.NewSupervisor("su1")
	assert.NotNil(t, su1)

	err = su1.SendStatesTimeout(10 * time.Millisecond)
	assert.Nil(t, err, "%v", err)
	sock := su1.Sock()

	time.Sleep(200 * time.Millisecond)

	addr, err := net.ResolveUnixAddr("unix", sock)
	assert.Nil(t, err)

	_, err = net.DialUnix("unix", nil, addr)
	assert.NotNil(t, err, "%v", err)
}