package git import ( "bytes" "strings" "testing" ) func TestPacketReader(t *testing.T) { // Test single packet t.Run("single packet", func(t *testing.T) { input := "0010hello world\n" reader := NewPacketReader(strings.NewReader(input)) packet, err := reader.ReadPacket() if err != nil { t.Fatalf("unexpected error: %v", err) } expected := "hello world\n" if string(packet) != expected { t.Errorf("expected %q, got %q", expected, string(packet)) } }) // Test flush packet t.Run("flush packet", func(t *testing.T) { input := "0000" reader := NewPacketReader(strings.NewReader(input)) packet, err := reader.ReadPacket() if err != nil { t.Fatalf("unexpected error: %v", err) } if packet != nil { t.Errorf("expected nil for flush packet, got %q", string(packet)) } }) } func TestPacketWriter(t *testing.T) { var buf bytes.Buffer writer := NewPacketWriter(&buf) err := writer.WritePacket([]byte("hello world\n")) if err != nil { t.Fatalf("unexpected error: %v", err) } err = writer.WriteFlush() if err != nil { t.Fatalf("unexpected error: %v", err) } expected := "0010hello world\n0000" if buf.String() != expected { t.Errorf("expected %q, got %q", expected, buf.String()) } } func TestParseUploadPackRequest(t *testing.T) { input := "0032want 1234567890abcdef1234567890abcdef12345678\n" + "0032want abcdef1234567890abcdef1234567890abcdef12\n" + "0032have fedcba0987654321fedcba0987654321fedcba09\n" + "0000" req, err := ParseUploadPackRequest(strings.NewReader(input)) if err != nil { t.Fatalf("unexpected error: %v", err) } expectedWants := []string{ "1234567890abcdef1234567890abcdef12345678", "abcdef1234567890abcdef1234567890abcdef12", } expectedHaves := []string{ "fedcba0987654321fedcba0987654321fedcba09", } if len(req.Wants) != len(expectedWants) { t.Fatalf("expected %d wants, got %d", len(expectedWants), len(req.Wants)) } for i, want := range expectedWants { if req.Wants[i] != want { t.Errorf("want %d: expected %q, got %q", i, want, req.Wants[i]) } } if len(req.Haves) != len(expectedHaves) { t.Fatalf("expected %d haves, got %d", len(expectedHaves), len(req.Haves)) } for i, have := range expectedHaves { if req.Haves[i] != have { t.Errorf("have %d: expected %q, got %q", i, have, req.Haves[i]) } } }