mirror of
https://github.com/moby/buildkit.git
synced 2026-11-06 13:26:48 +00:00
276 lines
9.0 KiB
Go
276 lines
9.0 KiB
Go
package gitobject
|
|
|
|
import (
|
|
"crypto/sha1" //nolint:gosec // used for git object hashes
|
|
"encoding/hex"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseGitObject(t *testing.T) {
|
|
rawCommit := `tree c60378fad086260463884449208b0545cef5703d
|
|
parent 2777c1b86e59a951188b81e310d3dc8b05b6ac9c
|
|
parent 916074cfc59ff9d4a29e0e1e74c3dd745b5e0d23
|
|
author Tõnis Tiigi <tonistiigi@gmail.com> 1758656883 -0700
|
|
committer GitHub <noreply@github.com> 1758656883 -0700
|
|
gpgsig -----BEGIN PGP SIGNATURE-----
|
|
|
|
wsFcBAABCAAQBQJo0vlzCRC1aQ7uu5UhlAAAmL0QACwN0cWbwqWeoI14uhYSFqV2
|
|
iRaUm2+vAoJcDkx4eRiKWyZxnCt1NApBpHZ3/R46nQyYf5syPAWtSfe/I9cBO6ed
|
|
qiQldlYqaEDzKqLc5AKqmf+jP6PxvfOY7qX1Qnwe9IVNqVmrCak3GJchedQStxIz
|
|
yHfx/4EFRf46LkpmmRgnou5P9Z6/em5zr70G8nOEGE0evSdgHF5hVkNzmfLBbRbI
|
|
RkhvHYZJGdn+bphAFM487+ySbzEwz0sFxXiUn+sLkKUU/Y62jqto7WXrToXOoeCc
|
|
h1DDrfSMzOJThQ+glgfyugXtBobXbuV62qLcnWfBoazWX6vc82UMlTH+lDd0rvQJ
|
|
4Rx6jzeivwtIkMzOKDpJfEIaqXTLXEj5utI95t7vO9v6V/UctjLIr4K86o02VF7v
|
|
6H60+3nKYt7kVeI0x6Hc3R9fWtohYAc8a/2xzyGxluqJokdaKOx5eTOrkAN/wdiv
|
|
es/nyYwMW07fxAns0BoH3aHgwFrMWmGLovhwLOAdBgVYAuW2I5KNa6FavBUBaGWD
|
|
/Cb2f8ZcaGVcvnwFEFkjcp9k+xCB2SGOJszbdehz86f/+rhQHJKvyIXvlWTYCswq
|
|
K6/YilEke++bcpfoOV2PgOEmV4rWescIcxlremnYqtahR81BQYkrZYnihxIaVZc/
|
|
Mq9vT7yP08mV6474Ihno
|
|
=sixl
|
|
-----END PGP SIGNATURE-----
|
|
|
|
|
|
Merge pull request #6237 from jsternberg/hack-compose
|
|
|
|
hack: update hack/compose with newer otel collector`
|
|
shaCommit := `c8fad61a079f8272be5559fe473171a8f6333679`
|
|
|
|
obj, err := Parse([]byte(rawCommit))
|
|
require.NoError(t, err)
|
|
|
|
sum, err := obj.Checksum(sha1.New)
|
|
require.NoError(t, err)
|
|
require.Equal(t, shaCommit, hex.EncodeToString(sum))
|
|
err = obj.VerifyChecksum(shaCommit)
|
|
require.NoError(t, err)
|
|
|
|
err = obj.VerifyChecksum("0000000000000000000000000000000000000000")
|
|
require.Error(t, err)
|
|
|
|
const expectedSig = `-----BEGIN PGP SIGNATURE-----
|
|
|
|
wsFcBAABCAAQBQJo0vlzCRC1aQ7uu5UhlAAAmL0QACwN0cWbwqWeoI14uhYSFqV2
|
|
iRaUm2+vAoJcDkx4eRiKWyZxnCt1NApBpHZ3/R46nQyYf5syPAWtSfe/I9cBO6ed
|
|
qiQldlYqaEDzKqLc5AKqmf+jP6PxvfOY7qX1Qnwe9IVNqVmrCak3GJchedQStxIz
|
|
yHfx/4EFRf46LkpmmRgnou5P9Z6/em5zr70G8nOEGE0evSdgHF5hVkNzmfLBbRbI
|
|
RkhvHYZJGdn+bphAFM487+ySbzEwz0sFxXiUn+sLkKUU/Y62jqto7WXrToXOoeCc
|
|
h1DDrfSMzOJThQ+glgfyugXtBobXbuV62qLcnWfBoazWX6vc82UMlTH+lDd0rvQJ
|
|
4Rx6jzeivwtIkMzOKDpJfEIaqXTLXEj5utI95t7vO9v6V/UctjLIr4K86o02VF7v
|
|
6H60+3nKYt7kVeI0x6Hc3R9fWtohYAc8a/2xzyGxluqJokdaKOx5eTOrkAN/wdiv
|
|
es/nyYwMW07fxAns0BoH3aHgwFrMWmGLovhwLOAdBgVYAuW2I5KNa6FavBUBaGWD
|
|
/Cb2f8ZcaGVcvnwFEFkjcp9k+xCB2SGOJszbdehz86f/+rhQHJKvyIXvlWTYCswq
|
|
K6/YilEke++bcpfoOV2PgOEmV4rWescIcxlremnYqtahR81BQYkrZYnihxIaVZc/
|
|
Mq9vT7yP08mV6474Ihno
|
|
=sixl
|
|
-----END PGP SIGNATURE-----
|
|
`
|
|
require.Equal(t, expectedSig, obj.Signature)
|
|
|
|
const expectedSignedData = `tree c60378fad086260463884449208b0545cef5703d
|
|
parent 2777c1b86e59a951188b81e310d3dc8b05b6ac9c
|
|
parent 916074cfc59ff9d4a29e0e1e74c3dd745b5e0d23
|
|
author Tõnis Tiigi <tonistiigi@gmail.com> 1758656883 -0700
|
|
committer GitHub <noreply@github.com> 1758656883 -0700
|
|
|
|
Merge pull request #6237 from jsternberg/hack-compose
|
|
|
|
hack: update hack/compose with newer otel collector`
|
|
require.Equal(t, expectedSignedData, obj.SignedData)
|
|
|
|
require.Equal(t, []string{"c60378fad086260463884449208b0545cef5703d"}, obj.Headers["tree"])
|
|
|
|
require.Equal(t, "commit", obj.Type)
|
|
require.Equal(t, `Merge pull request #6237 from jsternberg/hack-compose
|
|
|
|
hack: update hack/compose with newer otel collector`, obj.Message)
|
|
|
|
commit, err := obj.ToCommit()
|
|
require.NoError(t, err)
|
|
require.Equal(t, "Tõnis Tiigi", commit.Author.Name)
|
|
require.Equal(t, "tonistiigi@gmail.com", commit.Author.Email)
|
|
require.Equal(t, int64(1758656883), commit.Author.When.Unix())
|
|
_, offset := commit.Author.When.Zone()
|
|
require.Equal(t, -7*3600, offset)
|
|
|
|
require.Equal(t, 2, len(commit.Parents))
|
|
require.Equal(t, "2777c1b86e59a951188b81e310d3dc8b05b6ac9c", commit.Parents[0])
|
|
require.Equal(t, "916074cfc59ff9d4a29e0e1e74c3dd745b5e0d23", commit.Parents[1])
|
|
|
|
require.Equal(t, "GitHub", commit.Committer.Name)
|
|
require.Equal(t, "noreply@github.com", commit.Committer.Email)
|
|
require.Equal(t, int64(1758656883), commit.Committer.When.Unix())
|
|
_, offset = commit.Committer.When.Zone()
|
|
require.Equal(t, -7*3600, offset)
|
|
|
|
_, err = obj.ToTag()
|
|
require.Error(t, err)
|
|
|
|
shaTag := `813f42e05f8d94edb13c70a51dc6f8457c08a672`
|
|
raw := `object c8fad61a079f8272be5559fe473171a8f6333679
|
|
type commit
|
|
tag v0.25.0-rc1
|
|
tagger Tonis Tiigi <tonistiigi@gmail.com> 1758658255 -0700
|
|
|
|
v0.25.0-rc1
|
|
-----BEGIN PGP SIGNATURE-----
|
|
|
|
iQGzBAABCAAdFiEEVxbwWSJT3TMaEhiGr6neX4q3rzkFAmjS/s8ACgkQr6neX4q3
|
|
rzlE+Av/b2FbO2AoBf0CQrRK/ggRcz1lla4xEyV+VrU3M/oEo1kKfpyQE4qXPSZC
|
|
ybn7busZbmwrGpwXbMYk6ADg2lANhR4sjwWPw4b4hh3n0iSlD37eu63UEUeoIHCh
|
|
+Low+l5gkojExY8OfG8t34FZMdLzuA70lVclZHYEh+ucDb9kg6GlJCPQ3i1CizPj
|
|
iCkRr2veuTNDykSdS9aqI3NJ5EXJT7A9CFZ7dGTilH+6o4PJLSIp0xl8AWecLju2
|
|
0VYQtfo3W0UftxRLldU+KTc2UqUI3A5I/KyryYd8pJnTkh9xnO8TvF9O/wkvNUem
|
|
pzY8yP5t3/wYbnjrCYhpEauXc/JCxh6dh/mTvcs2GoyLBYRSAtOei10UutdNDf5t
|
|
xBB+AG8ocd4ro+kxXhabvSWG3kmLXkaBXVG31LLcIGEfVNP9hnzV0DXbLCzVBD7+
|
|
SxdXrB7XhARUFFIKtobmBmLfAww18R6DGD0pNE+uSLplUy2D5HJA2R4UnJb+0DIR
|
|
yVkI8y/p
|
|
=12Xx
|
|
-----END PGP SIGNATURE-----
|
|
`
|
|
obj, err = Parse([]byte(raw))
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, "tag", obj.Type)
|
|
require.Equal(t, []string{"v0.25.0-rc1"}, obj.Headers["tag"])
|
|
require.Equal(t, "v0.25.0-rc1", obj.Message)
|
|
|
|
const expectedTagSig = `-----BEGIN PGP SIGNATURE-----
|
|
|
|
iQGzBAABCAAdFiEEVxbwWSJT3TMaEhiGr6neX4q3rzkFAmjS/s8ACgkQr6neX4q3
|
|
rzlE+Av/b2FbO2AoBf0CQrRK/ggRcz1lla4xEyV+VrU3M/oEo1kKfpyQE4qXPSZC
|
|
ybn7busZbmwrGpwXbMYk6ADg2lANhR4sjwWPw4b4hh3n0iSlD37eu63UEUeoIHCh
|
|
+Low+l5gkojExY8OfG8t34FZMdLzuA70lVclZHYEh+ucDb9kg6GlJCPQ3i1CizPj
|
|
iCkRr2veuTNDykSdS9aqI3NJ5EXJT7A9CFZ7dGTilH+6o4PJLSIp0xl8AWecLju2
|
|
0VYQtfo3W0UftxRLldU+KTc2UqUI3A5I/KyryYd8pJnTkh9xnO8TvF9O/wkvNUem
|
|
pzY8yP5t3/wYbnjrCYhpEauXc/JCxh6dh/mTvcs2GoyLBYRSAtOei10UutdNDf5t
|
|
xBB+AG8ocd4ro+kxXhabvSWG3kmLXkaBXVG31LLcIGEfVNP9hnzV0DXbLCzVBD7+
|
|
SxdXrB7XhARUFFIKtobmBmLfAww18R6DGD0pNE+uSLplUy2D5HJA2R4UnJb+0DIR
|
|
yVkI8y/p
|
|
=12Xx
|
|
-----END PGP SIGNATURE-----
|
|
`
|
|
require.Equal(t, expectedTagSig, obj.Signature)
|
|
|
|
const expectedTagSignedData = `object c8fad61a079f8272be5559fe473171a8f6333679
|
|
type commit
|
|
tag v0.25.0-rc1
|
|
tagger Tonis Tiigi <tonistiigi@gmail.com> 1758658255 -0700
|
|
|
|
v0.25.0-rc1
|
|
`
|
|
require.Equal(t, expectedTagSignedData, obj.SignedData)
|
|
|
|
sum, err = obj.Checksum(sha1.New)
|
|
require.NoError(t, err)
|
|
require.Equal(t, shaTag, hex.EncodeToString(sum))
|
|
|
|
err = obj.VerifyChecksum(shaTag)
|
|
require.NoError(t, err)
|
|
|
|
tag, err := obj.ToTag()
|
|
require.NoError(t, err)
|
|
require.Equal(t, "v0.25.0-rc1", tag.Tag)
|
|
require.Equal(t, "c8fad61a079f8272be5559fe473171a8f6333679", tag.Object)
|
|
require.Equal(t, "commit", tag.Type)
|
|
require.Equal(t, "Tonis Tiigi", tag.Tagger.Name)
|
|
require.Equal(t, "tonistiigi@gmail.com", tag.Tagger.Email)
|
|
require.Equal(t, int64(1758658255), tag.Tagger.When.Unix())
|
|
_, offset = tag.Tagger.When.Zone()
|
|
require.Equal(t, -7*3600, offset)
|
|
}
|
|
|
|
func TestParseActor(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
wantName string
|
|
wantMail string
|
|
wantTime *time.Time
|
|
}{
|
|
{
|
|
name: "normal",
|
|
input: "User One <user1@example.com> 1759247759 -0500",
|
|
wantName: "User One",
|
|
wantMail: "user1@example.com",
|
|
wantTime: func() *time.Time {
|
|
loc := time.FixedZone("", -5*3600)
|
|
t := time.Unix(1759247759, 0).In(loc)
|
|
return &t
|
|
}(),
|
|
},
|
|
{
|
|
name: "no timestamp",
|
|
input: "User Two <user2@example.com>",
|
|
wantName: "User Two",
|
|
wantMail: "user2@example.com",
|
|
wantTime: nil,
|
|
},
|
|
{
|
|
name: "invalid timestamp",
|
|
input: "User Three <user3@example.com> notatime +0000",
|
|
wantName: "User Three",
|
|
wantMail: "user3@example.com",
|
|
wantTime: nil,
|
|
},
|
|
{
|
|
name: "invalid tz format",
|
|
input: "User Four <user4@example.com> 1759247759 500",
|
|
wantName: "User Four",
|
|
wantMail: "user4@example.com",
|
|
wantTime: nil,
|
|
},
|
|
{
|
|
name: "missing angle brackets",
|
|
input: "User Five user5@example.com 1759247759 +0000",
|
|
wantName: "User Five user5@example.com 1759247759 +0000",
|
|
wantMail: "",
|
|
wantTime: nil,
|
|
},
|
|
{
|
|
name: "extra spaces",
|
|
input: " User Six <user6@example.com> 1600000000 +0200 ",
|
|
wantName: "User Six",
|
|
wantMail: "user6@example.com",
|
|
wantTime: func() *time.Time {
|
|
loc := time.FixedZone("", 2*3600)
|
|
t := time.Unix(1600000000, 0).In(loc)
|
|
return &t
|
|
}(),
|
|
},
|
|
{
|
|
name: "name contains angle bracket",
|
|
input: "Strange <Name <strange@example.com> 1600000000 +0000",
|
|
wantName: "Strange <Name",
|
|
wantMail: "strange@example.com",
|
|
wantTime: func() *time.Time {
|
|
loc := time.FixedZone("", 0)
|
|
t := time.Unix(1600000000, 0).In(loc)
|
|
return &t
|
|
}(),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := parseActor(tt.input)
|
|
|
|
require.Equal(t, tt.wantName, got.Name)
|
|
require.Equal(t, tt.wantMail, got.Email)
|
|
|
|
if tt.wantTime == nil {
|
|
require.Nil(t, got.When)
|
|
} else {
|
|
require.NotNil(t, got.When)
|
|
require.Equal(t, tt.wantTime.Unix(), got.When.Unix())
|
|
// compare timezone by offset (Zone), not by Location string which can be empty
|
|
_, wantOffset := tt.wantTime.Zone()
|
|
_, gotOffset := got.When.Zone()
|
|
require.Equal(t, wantOffset, gotOffset)
|
|
}
|
|
})
|
|
}
|
|
}
|