* Fix KeyExpiration when a zero time value has a timezone

When a zero time value is loaded from JSON or a DB in a way that
assigns it the local timezone, it does not roudtrip in JSON as a
value for which IsZero returns true. This causes KeyExpiry to be
treated as a far past value instead of a nilish value.

See https://github.com/golang/go/issues/57040

* Fix whitespace

* Ensure that postgresql is used for all tests when env var is set

* Pass through value of HEADSCALE_INTEGRATION_POSTGRES env var

* Add option to set timezone on headscale container

* Add test for registration with auth key in alternate timezone
This commit is contained in:
Mike Poindexter 2024-09-03 00:22:17 -07:00 committed by GitHub
parent aa0f3d43cc
commit 3101f895a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 91 additions and 7 deletions

View file

@ -215,6 +215,14 @@ func TestAuthKeyLogoutAndRelogin(t *testing.T) {
}
func TestEphemeral(t *testing.T) {
testEphemeralWithOptions(t, hsic.WithTestName("ephemeral"))
}
func TestEphemeralInAlternateTimezone(t *testing.T) {
testEphemeralWithOptions(t, hsic.WithTestName("ephemeral-tz"), hsic.WithTimezone("America/Los_Angeles"))
}
func testEphemeralWithOptions(t *testing.T, opts ...hsic.Option) {
IntegrationSkip(t)
t.Parallel()
@ -227,7 +235,7 @@ func TestEphemeral(t *testing.T) {
"user2": len(MustTestVersions),
}
headscale, err := scenario.Headscale(hsic.WithTestName("ephemeral"))
headscale, err := scenario.Headscale(opts...)
assertNoErrHeadscaleEnv(t, err)
for userName, clientCount := range spec {

View file

@ -211,6 +211,12 @@ func WithTuning(batchTimeout time.Duration, mapSessionChanSize int) Option {
}
}
func WithTimezone(timezone string) Option {
return func(hsic *HeadscaleInContainer) {
hsic.env["TZ"] = timezone
}
}
// New returns a new HeadscaleInContainer instance.
func New(
pool *dockertest.Pool,

View file

@ -26,6 +26,7 @@ run_tests() {
--volume "$PWD:$PWD" -w "$PWD"/integration \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume "$PWD"/control_logs:/tmp/control \
-e "HEADSCALE_INTEGRATION_POSTGRES" \
golang:1 \
go test ./... \
-failfast \

View file

@ -249,6 +249,10 @@ func (s *Scenario) Headscale(opts ...hsic.Option) (ControlServer, error) {
return headscale, nil
}
if usePostgresForTest {
opts = append(opts, hsic.WithPostgres())
}
headscale, err := hsic.New(s.pool, s.network, opts...)
if err != nil {
return nil, fmt.Errorf("failed to create headscale container: %w", err)
@ -465,10 +469,6 @@ func (s *Scenario) CreateHeadscaleEnv(
tsOpts []tsic.Option,
opts ...hsic.Option,
) error {
if usePostgresForTest {
opts = append(opts, hsic.WithPostgres())
}
headscale, err := s.Headscale(opts...)
if err != nil {
return err