You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo_attribute_test.go 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. import (
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func Test_nulSeparatedAttributeWriter_ReadAttribute(t *testing.T) {
  10. wr := &nulSeparatedAttributeWriter{
  11. attributes: make(chan attributeTriple, 5),
  12. }
  13. testStr := ".gitignore\"\n\x00linguist-vendored\x00unspecified\x00"
  14. n, err := wr.Write([]byte(testStr))
  15. assert.Len(t, testStr, n)
  16. assert.NoError(t, err)
  17. select {
  18. case attr := <-wr.ReadAttribute():
  19. assert.Equal(t, ".gitignore\"\n", attr.Filename)
  20. assert.Equal(t, "linguist-vendored", attr.Attribute)
  21. assert.Equal(t, "unspecified", attr.Value)
  22. case <-time.After(100 * time.Millisecond):
  23. assert.FailNow(t, "took too long to read an attribute from the list")
  24. }
  25. // Write a second attribute again
  26. n, err = wr.Write([]byte(testStr))
  27. assert.Len(t, testStr, n)
  28. assert.NoError(t, err)
  29. select {
  30. case attr := <-wr.ReadAttribute():
  31. assert.Equal(t, ".gitignore\"\n", attr.Filename)
  32. assert.Equal(t, "linguist-vendored", attr.Attribute)
  33. assert.Equal(t, "unspecified", attr.Value)
  34. case <-time.After(100 * time.Millisecond):
  35. assert.FailNow(t, "took too long to read an attribute from the list")
  36. }
  37. // Write a partial attribute
  38. _, err = wr.Write([]byte("incomplete-file"))
  39. assert.NoError(t, err)
  40. _, err = wr.Write([]byte("name\x00"))
  41. assert.NoError(t, err)
  42. select {
  43. case <-wr.ReadAttribute():
  44. assert.FailNow(t, "There should not be an attribute ready to read")
  45. case <-time.After(100 * time.Millisecond):
  46. }
  47. _, err = wr.Write([]byte("attribute\x00"))
  48. assert.NoError(t, err)
  49. select {
  50. case <-wr.ReadAttribute():
  51. assert.FailNow(t, "There should not be an attribute ready to read")
  52. case <-time.After(100 * time.Millisecond):
  53. }
  54. _, err = wr.Write([]byte("value\x00"))
  55. assert.NoError(t, err)
  56. attr := <-wr.ReadAttribute()
  57. assert.Equal(t, "incomplete-filename", attr.Filename)
  58. assert.Equal(t, "attribute", attr.Attribute)
  59. assert.Equal(t, "value", attr.Value)
  60. _, err = wr.Write([]byte("shouldbe.vendor\x00linguist-vendored\x00set\x00shouldbe.vendor\x00linguist-generated\x00unspecified\x00shouldbe.vendor\x00linguist-language\x00unspecified\x00"))
  61. assert.NoError(t, err)
  62. attr = <-wr.ReadAttribute()
  63. assert.NoError(t, err)
  64. assert.EqualValues(t, attributeTriple{
  65. Filename: "shouldbe.vendor",
  66. Attribute: "linguist-vendored",
  67. Value: "set",
  68. }, attr)
  69. attr = <-wr.ReadAttribute()
  70. assert.NoError(t, err)
  71. assert.EqualValues(t, attributeTriple{
  72. Filename: "shouldbe.vendor",
  73. Attribute: "linguist-generated",
  74. Value: "unspecified",
  75. }, attr)
  76. attr = <-wr.ReadAttribute()
  77. assert.NoError(t, err)
  78. assert.EqualValues(t, attributeTriple{
  79. Filename: "shouldbe.vendor",
  80. Attribute: "linguist-language",
  81. Value: "unspecified",
  82. }, attr)
  83. }