ref: 2536a35b68aa37d3a6d57305ae12b50b99c51f42
dir: /repository/read_stored_passthrough_test.go/
package repository_test
import (
"bytes"
"io"
"os"
"testing"
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objecttype"
"codeberg.org/lindenii/furgit/repository"
)
func TestReadStoredPassThroughs(t *testing.T) {
t.Parallel()
testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper
repoHarness := testgit.NewRepo(t, testgit.RepoOptions{
ObjectFormat: algo,
Bare: true,
RefFormat: "files",
})
_, _, commitID := repoHarness.MakeCommit(t, "pass-through")
root, err := os.OpenRoot(repoHarness.Dir())
if err != nil {
t.Fatalf("os.OpenRoot: %v", err)
}
defer func() { _ = root.Close() }()
repo, err := repository.Open(root)
if err != nil {
t.Fatalf("repository.Open: %v", err)
}
defer func() { _ = repo.Close() }()
headerTy, headerSize, err := repo.ReadStoredHeader(commitID)
if err != nil {
t.Fatalf("ReadStoredHeader: %v", err)
}
if headerTy != objecttype.TypeCommit {
t.Fatalf("ReadStoredHeader type = %v, want %v", headerTy, objecttype.TypeCommit)
}
if headerSize <= 0 {
t.Fatalf("ReadStoredHeader size = %d, want > 0", headerSize)
}
full, err := repo.ReadStoredBytesFull(commitID)
if err != nil {
t.Fatalf("ReadStoredBytesFull: %v", err)
}
if len(full) == 0 {
t.Fatalf("ReadStoredBytesFull returned empty payload")
}
contentTy, content, err := repo.ReadStoredBytesContent(commitID)
if err != nil {
t.Fatalf("ReadStoredBytesContent: %v", err)
}
if contentTy != objecttype.TypeCommit {
t.Fatalf("ReadStoredBytesContent type = %v, want %v", contentTy, objecttype.TypeCommit)
}
if len(content) == 0 {
t.Fatalf("ReadStoredBytesContent returned empty content")
}
fullReader, err := repo.ReadStoredReaderFull(commitID)
if err != nil {
t.Fatalf("ReadStoredReaderFull: %v", err)
}
fullReaderBytes, readErr := io.ReadAll(fullReader)
closeErr := fullReader.Close()
if readErr != nil {
t.Fatalf("ReadStoredReaderFull read: %v", readErr)
}
if closeErr != nil {
t.Fatalf("ReadStoredReaderFull close: %v", closeErr)
}
if !bytes.Equal(fullReaderBytes, full) {
t.Fatalf("ReadStoredReaderFull bytes mismatch against ReadStoredBytesFull")
}
readerTy, readerSize, contentReader, err := repo.ReadStoredReaderContent(commitID)
if err != nil {
t.Fatalf("ReadStoredReaderContent: %v", err)
}
if readerTy != objecttype.TypeCommit {
t.Fatalf("ReadStoredReaderContent type = %v, want %v", readerTy, objecttype.TypeCommit)
}
if readerSize != int64(len(content)) {
t.Fatalf("ReadStoredReaderContent size = %d, want %d", readerSize, len(content))
}
readerContentBytes, readErr := io.ReadAll(contentReader)
closeErr = contentReader.Close()
if readErr != nil {
t.Fatalf("ReadStoredReaderContent read: %v", readErr)
}
if closeErr != nil {
t.Fatalf("ReadStoredReaderContent close: %v", closeErr)
}
if !bytes.Equal(readerContentBytes, content) {
t.Fatalf("ReadStoredReaderContent bytes mismatch against ReadStoredBytesContent")
}
})
}