ls_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package context
  2. import (
  3. "context"
  4. "io/ioutil"
  5. "os"
  6. "testing"
  7. "github.com/stretchr/testify/require"
  8. "github.com/stretchr/testify/suite"
  9. "gotest.tools/v3/golden"
  10. apicontext "github.com/docker/api/context"
  11. "github.com/docker/api/context/store"
  12. )
  13. type ContextSuite struct {
  14. suite.Suite
  15. ctx context.Context
  16. writer *os.File
  17. reader *os.File
  18. originalStdout *os.File
  19. storeRoot string
  20. }
  21. func (sut *ContextSuite) BeforeTest(suiteName, testName string) {
  22. ctx := context.Background()
  23. ctx = apicontext.WithCurrentContext(ctx, "example")
  24. dir, err := ioutil.TempDir("", "store")
  25. require.Nil(sut.T(), err)
  26. s, err := store.New(
  27. store.WithRoot(dir),
  28. )
  29. require.Nil(sut.T(), err)
  30. err = s.Create("example", store.TypedContext{
  31. Type: "example",
  32. })
  33. require.Nil(sut.T(), err)
  34. sut.storeRoot = dir
  35. ctx = store.WithContextStore(ctx, s)
  36. sut.ctx = ctx
  37. sut.originalStdout = os.Stdout
  38. r, w, err := os.Pipe()
  39. require.Nil(sut.T(), err)
  40. os.Stdout = w
  41. sut.writer = w
  42. sut.reader = r
  43. }
  44. func (sut *ContextSuite) getStdOut() string {
  45. err := sut.writer.Close()
  46. require.Nil(sut.T(), err)
  47. out, _ := ioutil.ReadAll(sut.reader)
  48. return string(out)
  49. }
  50. func (sut *ContextSuite) AfterTest(suiteName, testName string) {
  51. os.Stdout = sut.originalStdout
  52. err := os.RemoveAll(sut.storeRoot)
  53. require.Nil(sut.T(), err)
  54. }
  55. func (sut *ContextSuite) TestLs() {
  56. err := runList(sut.ctx)
  57. require.Nil(sut.T(), err)
  58. golden.Assert(sut.T(), sut.getStdOut(), "ls-out.golden")
  59. }
  60. func TestPs(t *testing.T) {
  61. suite.Run(t, new(ContextSuite))
  62. }