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  }