filesync_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package filesync
  2. import (
  3. "context"
  4. "io/ioutil"
  5. "path/filepath"
  6. "testing"
  7. "github.com/docker/docker/client/session"
  8. "github.com/docker/docker/client/session/testutil"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. "golang.org/x/sync/errgroup"
  12. )
  13. func TestFileSyncIncludePatterns(t *testing.T) {
  14. tmpDir, err := ioutil.TempDir("", "fsynctest")
  15. require.NoError(t, err)
  16. destDir, err := ioutil.TempDir("", "fsynctest")
  17. require.NoError(t, err)
  18. err = ioutil.WriteFile(filepath.Join(tmpDir, "foo"), []byte("content1"), 0600)
  19. require.NoError(t, err)
  20. err = ioutil.WriteFile(filepath.Join(tmpDir, "bar"), []byte("content2"), 0600)
  21. require.NoError(t, err)
  22. s, err := session.NewSession("foo", "bar")
  23. require.NoError(t, err)
  24. m, err := session.NewManager()
  25. require.NoError(t, err)
  26. fs := NewFSSyncProvider(tmpDir, nil)
  27. s.Allow(fs)
  28. dialer := session.Dialer(testutil.TestStream(testutil.Handler(m.HandleConn)))
  29. g, ctx := errgroup.WithContext(context.Background())
  30. g.Go(func() error {
  31. return s.Run(ctx, dialer)
  32. })
  33. g.Go(func() (reterr error) {
  34. c, err := m.Get(ctx, s.UUID())
  35. if err != nil {
  36. return err
  37. }
  38. if err := FSSync(ctx, c, FSSendRequestOpt{
  39. DestDir: destDir,
  40. IncludePatterns: []string{"ba*"},
  41. }); err != nil {
  42. return err
  43. }
  44. _, err = ioutil.ReadFile(filepath.Join(destDir, "foo"))
  45. assert.Error(t, err)
  46. dt, err := ioutil.ReadFile(filepath.Join(destDir, "bar"))
  47. if err != nil {
  48. return err
  49. }
  50. assert.Equal(t, "content2", string(dt))
  51. return s.Close()
  52. })
  53. err = g.Wait()
  54. require.NoError(t, err)
  55. }