talos

Форк
0
/
files_test.go 
141 строка · 2.8 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package conditions_test
6

7
import (
8
	"context"
9
	"os"
10
	"path/filepath"
11
	"testing"
12
	"time"
13

14
	"github.com/stretchr/testify/suite"
15

16
	"github.com/siderolabs/talos/pkg/conditions"
17
)
18

19
type FilesSuite struct {
20
	suite.Suite
21

22
	tempDir string
23
}
24

25
func (suite *FilesSuite) SetupSuite() {
26
	suite.tempDir = suite.T().TempDir()
27
}
28

29
func (suite *FilesSuite) createFile(name string) (path string) {
30
	path = filepath.Join(suite.tempDir, name)
31
	f, err := os.Create(path)
32
	suite.Require().NoError(err)
33

34
	suite.Require().NoError(f.Close())
35

36
	return
37
}
38

39
func (suite *FilesSuite) TestString() {
40
	suite.Require().Equal("file \"abc.txt\" to exist", conditions.WaitForFileToExist("abc.txt").String())
41
}
42

43
func (suite *FilesSuite) TestWaitForFileToExist() {
44
	path := suite.createFile("w.txt")
45

46
	err := conditions.WaitForFileToExist(path).Wait(context.Background())
47
	suite.Require().NoError(err)
48

49
	suite.Require().NoError(os.Remove(path))
50

51
	errCh := make(chan error)
52

53
	go func() {
54
		errCh <- conditions.WaitForFileToExist(path).Wait(context.Background())
55
	}()
56

57
	time.Sleep(50 * time.Millisecond)
58

59
	select {
60
	case <-errCh:
61
		suite.Fail("unexpected return")
62
	default:
63
	}
64

65
	suite.createFile("w.txt")
66

67
	suite.Require().NoError(<-errCh)
68

69
	suite.Require().NoError(os.Remove(path))
70

71
	ctx, ctxCancel := context.WithCancel(context.Background())
72

73
	go func() {
74
		errCh <- conditions.WaitForFileToExist(path).Wait(ctx)
75
	}()
76

77
	time.Sleep(50 * time.Millisecond)
78

79
	select {
80
	case <-errCh:
81
		suite.Fail("unexpected return")
82
	default:
83
	}
84

85
	ctxCancel()
86

87
	suite.Require().EqualError(<-errCh, context.Canceled.Error())
88
}
89

90
func (suite *FilesSuite) TestWaitForAllFilesToExist() {
91
	pathA := suite.createFile("wA.txt")
92
	pathB := suite.createFile("wB.txt")
93

94
	err := conditions.WaitForFilesToExist(pathA, pathB).Wait(context.Background())
95
	suite.Require().NoError(err)
96

97
	suite.Require().NoError(os.Remove(pathB))
98

99
	errCh := make(chan error)
100

101
	go func() {
102
		errCh <- conditions.WaitForFilesToExist(pathA, pathB).Wait(context.Background())
103
	}()
104

105
	time.Sleep(50 * time.Millisecond)
106

107
	select {
108
	case <-errCh:
109
		suite.Fail("unexpected return")
110
	default:
111
	}
112

113
	suite.createFile("wB.txt")
114

115
	suite.Require().NoError(<-errCh)
116

117
	suite.Require().NoError(os.Remove(pathA))
118
	suite.Require().NoError(os.Remove(pathB))
119

120
	ctx, ctxCancel := context.WithCancel(context.Background())
121

122
	go func() {
123
		errCh <- conditions.WaitForFilesToExist(pathA, pathB).Wait(ctx)
124
	}()
125

126
	time.Sleep(50 * time.Millisecond)
127

128
	select {
129
	case <-errCh:
130
		suite.Fail("unexpected return")
131
	default:
132
	}
133

134
	ctxCancel()
135

136
	suite.Require().EqualError(<-errCh, context.Canceled.Error())
137
}
138

139
func TestFilesSuite(t *testing.T) {
140
	suite.Run(t, new(FilesSuite))
141
}
142

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.