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