talos
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
5package conditions_test6
7import (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
19type FilesSuite struct {20suite.Suite21
22tempDir string23}
24
25func (suite *FilesSuite) SetupSuite() {26suite.tempDir = suite.T().TempDir()27}
28
29func (suite *FilesSuite) createFile(name string) (path string) {30path = filepath.Join(suite.tempDir, name)31f, err := os.Create(path)32suite.Require().NoError(err)33
34suite.Require().NoError(f.Close())35
36return37}
38
39func (suite *FilesSuite) TestString() {40suite.Require().Equal("file \"abc.txt\" to exist", conditions.WaitForFileToExist("abc.txt").String())41}
42
43func (suite *FilesSuite) TestWaitForFileToExist() {44path := suite.createFile("w.txt")45
46err := conditions.WaitForFileToExist(path).Wait(context.Background())47suite.Require().NoError(err)48
49suite.Require().NoError(os.Remove(path))50
51errCh := make(chan error)52
53go func() {54errCh <- conditions.WaitForFileToExist(path).Wait(context.Background())55}()56
57time.Sleep(50 * time.Millisecond)58
59select {60case <-errCh:61suite.Fail("unexpected return")62default:63}64
65suite.createFile("w.txt")66
67suite.Require().NoError(<-errCh)68
69suite.Require().NoError(os.Remove(path))70
71ctx, ctxCancel := context.WithCancel(context.Background())72
73go func() {74errCh <- conditions.WaitForFileToExist(path).Wait(ctx)75}()76
77time.Sleep(50 * time.Millisecond)78
79select {80case <-errCh:81suite.Fail("unexpected return")82default:83}84
85ctxCancel()86
87suite.Require().EqualError(<-errCh, context.Canceled.Error())88}
89
90func (suite *FilesSuite) TestWaitForAllFilesToExist() {91pathA := suite.createFile("wA.txt")92pathB := suite.createFile("wB.txt")93
94err := conditions.WaitForFilesToExist(pathA, pathB).Wait(context.Background())95suite.Require().NoError(err)96
97suite.Require().NoError(os.Remove(pathB))98
99errCh := make(chan error)100
101go func() {102errCh <- conditions.WaitForFilesToExist(pathA, pathB).Wait(context.Background())103}()104
105time.Sleep(50 * time.Millisecond)106
107select {108case <-errCh:109suite.Fail("unexpected return")110default:111}112
113suite.createFile("wB.txt")114
115suite.Require().NoError(<-errCh)116
117suite.Require().NoError(os.Remove(pathA))118suite.Require().NoError(os.Remove(pathB))119
120ctx, ctxCancel := context.WithCancel(context.Background())121
122go func() {123errCh <- conditions.WaitForFilesToExist(pathA, pathB).Wait(ctx)124}()125
126time.Sleep(50 * time.Millisecond)127
128select {129case <-errCh:130suite.Fail("unexpected return")131default:132}133
134ctxCancel()135
136suite.Require().EqualError(<-errCh, context.Canceled.Error())137}
138
139func TestFilesSuite(t *testing.T) {140suite.Run(t, new(FilesSuite))141}
142