drone/gitrpc/internal/gitea/gitea_test.go
Enver Bisevac 578dd13d8d [maint] eb/gitrpc refactor (#51)
* pull/push impl done

* Basic auth for harness

* gitrpc as top level package

* New ctor for package

* gitrpcserver instead of server2
2022-11-03 13:17:03 +01:00

92 lines
3.9 KiB
Go

// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package gitea
import (
"fmt"
"testing"
"time"
"github.com/harness/gitness/gitrpc/internal/types"
"github.com/stretchr/testify/require"
)
func TestParseSignatureFromCatFileLine(t *testing.T) {
// test good cases
testParseSignatureFromCatFileLineFor(t, "Max Mustermann", "max.mm@me.io", "1666401234 -0700", 1666401234, -7*60*60)
testParseSignatureFromCatFileLineFor(t, "Max", "max@gitness.io", "1666050206 +0530", 1666050206, 5*60*60+30*60)
testParseSignatureFromCatFileLineFor(t, "Max", "max@gitness.io", "1666401234 +0000", 1666401234, 0)
testParseSignatureFromCatFileLineFor(t, "Max", "randomEmail", "1666401234 -0000", 1666401234, 0)
testParseSignatureFromCatFileLineFor(t, "Max", "max@mm.io", "Fri Sep 23 10:57:49 2022 -0700", 1663955869, -7*60*60)
// test bad cases
_, err := parseSignatureFromCatFileLine("<email> 1666401234 -0700")
require.Error(t, err, "no name")
_, err = parseSignatureFromCatFileLine("name 1666401234 -0700")
require.Error(t, err, "no email")
_, err = parseSignatureFromCatFileLine("name <email>")
require.Error(t, err, "no time")
_, err = parseSignatureFromCatFileLine("name <email> ")
require.Error(t, err, "no time2")
_, err = parseSignatureFromCatFileLine("name <email> 1666050206")
require.Error(t, err, "no timezone with unix")
_, err = parseSignatureFromCatFileLine("name <email> +0800")
require.Error(t, err, "no unix with timezone")
_, err = parseSignatureFromCatFileLine("name <email> 1666050206 0800")
require.Error(t, err, "timezone no sign")
_, err = parseSignatureFromCatFileLine("name <email> 1666050206 +080")
require.Error(t, err, "timezone too short")
_, err = parseSignatureFromCatFileLine("name <email> 1666050206 +00a0")
require.Error(t, err, "timezone invald char")
}
func testParseSignatureFromCatFileLineFor(t *testing.T, name string, email string, timeAsString string,
expectedTimeUnix int64, expectedTimeOffset int) {
line := fmt.Sprintf("%s <%s> %s", name, email, timeAsString)
s, err := parseSignatureFromCatFileLine(line)
require.NoError(t, err, line)
require.Equal(t, name, s.Identity.Name, line)
require.Equal(t, email, s.Identity.Email, line)
// verify time and offset
_, offset := s.When.Zone()
require.Equal(t, expectedTimeUnix, s.When.Unix(), line)
require.Equal(t, expectedTimeOffset, offset, line)
}
func TestParseTagDataFromCatFile(t *testing.T) {
when, _ := time.Parse(defaultGitTimeLayout, "Fri Sep 23 10:57:49 2022 -0700")
testParseTagDataFromCatFileFor(t, "sha012", types.GitObjectTypeTag, "name1",
types.Signature{Identity: types.Identity{Name: "max", Email: "max@mail.com"}, When: when},
"some message", "some message")
// test with signature
testParseTagDataFromCatFileFor(t, "sha012", types.GitObjectTypeCommit, "name2",
types.Signature{Identity: types.Identity{Name: "max", Email: "max@mail.com"}, When: when},
"gpgsig -----BEGIN PGP SIGNATURE-----\n\nw...B\n-----END PGP SIGNATURE-----\n\nsome message",
"some message")
}
func testParseTagDataFromCatFileFor(t *testing.T, object string, typ types.GitObjectType, name string,
tagger types.Signature, remainder string, expectedMessage string) {
data := fmt.Sprintf(
"object %s\ntype %s\ntag %s\ntagger %s <%s> %s\n%s",
object, string(typ), name,
tagger.Identity.Name, tagger.Identity.Email, tagger.When.Format(defaultGitTimeLayout),
remainder)
res, err := parseTagDataFromCatFile([]byte(data))
require.NoError(t, err)
require.Equal(t, name, res.Name, data)
require.Equal(t, object, res.TargetSha, data)
require.Equal(t, typ, res.TargetType, data)
require.Equal(t, expectedMessage, res.Message, data)
require.Equal(t, tagger.Identity.Name, res.Tagger.Identity.Name, data)
require.Equal(t, tagger.Identity.Email, res.Tagger.Identity.Email, data)
require.Equal(t, tagger.When, res.Tagger.When, data)
}