Ctrl K
ComunidadGuías…

model/jwt_ip_change_atomic_test.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package model

import (
	"path/filepath"
	"sync"
	"testing"
)

func TestJWTIPChangeAllowedPersistence(t *testing.T) {
	c := &Config{}
	if c.JWTIPChangeAllowed() {
		t.Fatal("zero-value Config must bind JWT sessions to their IP")
	}
	// An absent agent secret makes Read save the config during initialization.
	path := newTempConfig(t, "jwt_secret_key: test\nallow_jwt_ip_change: true\n")
	if err := c.Read(path, nil); err != nil {
		t.Fatal(err)
	}
	if !c.JWTIPChangeAllowed() {
		t.Fatal("Read must initialize the atomic mirror before saving")
	}
	for _, want := range []bool{true, false} {
		c.SetJWTIPChangeAllowed(want)
		if err := c.Save(); err != nil {
			t.Fatal(err)
		}
		reloaded := &Config{}
		if err := reloaded.Read(path, nil); err != nil {
			t.Fatal(err)
		}
		if c.AllowJWTIPChange != want || reloaded.JWTIPChangeAllowed() != want {
			t.Fatalf("saved and reloaded setting must be %v", want)
		}
	}
}

func TestJWTIPChangeAllowedConcurrentAccess(t *testing.T) {
	c := &Config{filePath: filepath.Join(t.TempDir(), "config.yaml")}
	var wg sync.WaitGroup
	wg.Go(func() {
		for i := 0; i < 10000; i++ {
			c.SetJWTIPChangeAllowed(i%2 == 0)
		}
	})
	wg.Go(func() {
		for i := 0; i < 10000; i++ {
			_ = c.JWTIPChangeAllowed()
		}
	})
	for i := 0; i < 20; i++ {
		if err := c.Save(); err != nil {
			t.Error(err)
		}
	}
	wg.Wait()
}