Compare commits
	
		
			2 Commits
		
	
	
		
			87344dd601
			...
			62a7605869
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 62a7605869 | |||
| 0996167865 | 
@@ -30,7 +30,6 @@ func CAPool() (*x509.CertPool, error) {
 | 
				
			|||||||
// GetCertman sets up certman for the specified cert / key pair. It is
 | 
					// GetCertman sets up certman for the specified cert / key pair. It is
 | 
				
			||||||
// used in the monitor-api and (for now) in the client
 | 
					// used in the monitor-api and (for now) in the client
 | 
				
			||||||
func GetCertman(certFile, keyFile string) (*certman.CertMan, error) {
 | 
					func GetCertman(certFile, keyFile string) (*certman.CertMan, error) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	cm, err := certman.New(certFile, keyFile)
 | 
						cm, err := certman.New(certFile, keyFile)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ import (
 | 
				
			|||||||
	"go.ntppool.org/common/logger"
 | 
						"go.ntppool.org/common/logger"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//go:generate accessory -type Config
 | 
					//go:generate go tool github.com/masaushi/accessory -type Config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	deploymentMode string `accessor:"getter"`
 | 
						deploymentMode string `accessor:"getter"`
 | 
				
			||||||
@@ -50,6 +50,10 @@ func (c *Config) WebURL(path string, query *url.Values) string {
 | 
				
			|||||||
	return baseURL(c.webHostname, c.webTLS, path, query)
 | 
						return baseURL(c.webHostname, c.webTLS, path, query)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Config) ManageURL(path string, query *url.Values) string {
 | 
				
			||||||
 | 
						return baseURL(c.manageHostname, c.webTLS, path, query)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func baseURL(host string, tls bool, path string, query *url.Values) string {
 | 
					func baseURL(host string, tls bool, path string, query *url.Values) string {
 | 
				
			||||||
	uri := url.URL{}
 | 
						uri := url.URL{}
 | 
				
			||||||
	uri.Host = host
 | 
						uri.Host = host
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,6 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestBaseURL(t *testing.T) {
 | 
					func TestBaseURL(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev")
 | 
						os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev")
 | 
				
			||||||
	os.Setenv("web_tls", "yes")
 | 
						os.Setenv("web_tls", "yes")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -22,5 +21,4 @@ func TestBaseURL(t *testing.T) {
 | 
				
			|||||||
	if u != "https://www.ntp.dev/foo?foo=bar" {
 | 
						if u != "https://www.ntp.dev/foo?foo=bar" {
 | 
				
			||||||
		t.Fatalf("unexpected WebURL: %s", u)
 | 
							t.Fatalf("unexpected WebURL: %s", u)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,6 +69,10 @@ func (d DeploymentEnvironment) ManageURL(path string) string {
 | 
				
			|||||||
	return manageServers[d] + path
 | 
						return manageServers[d] + path
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d DeploymentEnvironment) MonitorDomain() string {
 | 
				
			||||||
 | 
						return d.String() + ".mon.ntppool.dev"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *DeploymentEnvironment) UnmarshalText(text []byte) error {
 | 
					func (d *DeploymentEnvironment) UnmarshalText(text []byte) error {
 | 
				
			||||||
	s := string(text)
 | 
						s := string(text)
 | 
				
			||||||
	if s == "" {
 | 
						if s == "" {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								ekko/ekko.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								ekko/ekko.go
									
									
									
									
									
								
							@@ -16,6 +16,7 @@ import (
 | 
				
			|||||||
	"go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
 | 
						"go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
 | 
				
			||||||
	"go.opentelemetry.io/otel/attribute"
 | 
						"go.opentelemetry.io/otel/attribute"
 | 
				
			||||||
	"go.opentelemetry.io/otel/trace"
 | 
						"go.opentelemetry.io/otel/trace"
 | 
				
			||||||
 | 
						"golang.org/x/net/http2"
 | 
				
			||||||
	"golang.org/x/sync/errgroup"
 | 
						"golang.org/x/sync/errgroup"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,7 +51,8 @@ func (ek *Ekko) Start(ctx context.Context) error {
 | 
				
			|||||||
	g.Go(func() error {
 | 
						g.Go(func() error {
 | 
				
			||||||
		e.Server.Addr = fmt.Sprintf(":%d", ek.port)
 | 
							e.Server.Addr = fmt.Sprintf(":%d", ek.port)
 | 
				
			||||||
		log.Info("server starting", "port", ek.port)
 | 
							log.Info("server starting", "port", ek.port)
 | 
				
			||||||
		err := e.Server.ListenAndServe()
 | 
							// err := e.Server.ListenAndServe()
 | 
				
			||||||
 | 
							err := e.StartH2CServer(e.Server.Addr, &http2.Server{})
 | 
				
			||||||
		if err == http.ErrServerClosed {
 | 
							if err == http.ErrServerClosed {
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -120,7 +122,13 @@ func (ek *Ekko) setup(ctx context.Context) (*echo.Echo, error) {
 | 
				
			|||||||
		e.Use(middleware.Gzip())
 | 
							e.Use(middleware.Gzip())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.Use(middleware.Secure())
 | 
						secureConfig := middleware.DefaultSecureConfig
 | 
				
			||||||
 | 
						// secureConfig.ContentSecurityPolicy = "default-src *"
 | 
				
			||||||
 | 
						secureConfig.ContentSecurityPolicy = ""
 | 
				
			||||||
 | 
						secureConfig.HSTSMaxAge = int(time.Hour * 168 * 30 / time.Second)
 | 
				
			||||||
 | 
						secureConfig.HSTSPreloadEnabled = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.Use(middleware.SecureWithConfig(secureConfig))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.Use(
 | 
						e.Use(
 | 
				
			||||||
		func(next echo.HandlerFunc) echo.HandlerFunc {
 | 
							func(next echo.HandlerFunc) echo.HandlerFunc {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestHealthHandler(t *testing.T) {
 | 
					func TestHealthHandler(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	req := httptest.NewRequest(http.MethodGet, "/__health", nil)
 | 
						req := httptest.NewRequest(http.MethodGet, "/__health", nil)
 | 
				
			||||||
	w := httptest.NewRecorder()
 | 
						w := httptest.NewRecorder()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,11 +42,9 @@ type Kafka struct {
 | 
				
			|||||||
	l *log.Logger
 | 
						l *log.Logger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// wr *kafka.Writer
 | 
						// wr *kafka.Writer
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (k *Kafka) tlsConfig() (*tls.Config, error) {
 | 
					func (k *Kafka) tlsConfig() (*tls.Config, error) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	cm, err := certman.New(k.tls.Cert, k.tls.Key)
 | 
						cm, err := certman.New(k.tls.Cert, k.tls.Key)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -189,7 +187,6 @@ func (k *Kafka) brokerAddrs() []string {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (k *Kafka) NewWriter(topic string) (*kafka.Writer, error) {
 | 
					func (k *Kafka) NewWriter(topic string) (*kafka.Writer, error) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	// https://pkg.go.dev/github.com/segmentio/kafka-go#Writer
 | 
						// https://pkg.go.dev/github.com/segmentio/kafka-go#Writer
 | 
				
			||||||
	w := &kafka.Writer{
 | 
						w := &kafka.Writer{
 | 
				
			||||||
		Addr:        kafka.TCP(k.brokerAddrs()...),
 | 
							Addr:        kafka.TCP(k.brokerAddrs()...),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,6 @@ type logfmt struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newLogFmtHandler(next slog.Handler) slog.Handler {
 | 
					func newLogFmtHandler(next slog.Handler) slog.Handler {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	buf := bytes.NewBuffer([]byte{})
 | 
						buf := bytes.NewBuffer([]byte{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	h := &logfmt{
 | 
						h := &logfmt{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,6 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestLogFmt(t *testing.T) {
 | 
					func TestLogFmt(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	var buf bytes.Buffer
 | 
						var buf bytes.Buffer
 | 
				
			||||||
	jsonh := slog.NewJSONHandler(&buf, nil)
 | 
						jsonh := slog.NewJSONHandler(&buf, nil)
 | 
				
			||||||
	h := newLogFmtHandler(jsonh)
 | 
						h := newLogFmtHandler(jsonh)
 | 
				
			||||||
@@ -39,5 +38,4 @@ func TestLogFmt(t *testing.T) {
 | 
				
			|||||||
		t.Log("didn't find message in output")
 | 
							t.Log("didn't find message in output")
 | 
				
			||||||
		t.Fail()
 | 
							t.Fail()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,17 +15,21 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var ConfigPrefix = ""
 | 
					var ConfigPrefix = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var textLogger *slog.Logger
 | 
					var (
 | 
				
			||||||
var otlpLogger *slog.Logger
 | 
						textLogger  *slog.Logger
 | 
				
			||||||
var multiLogger *slog.Logger
 | 
						otlpLogger  *slog.Logger
 | 
				
			||||||
 | 
						multiLogger *slog.Logger
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var setupText sync.Once  // this sets the default
 | 
					var (
 | 
				
			||||||
var setupOtlp sync.Once  // this never sets the default
 | 
						setupText  sync.Once // this sets the default
 | 
				
			||||||
var setupMulti sync.Once // this sets the default, and will always run after the others
 | 
						setupOtlp  sync.Once // this never sets the default
 | 
				
			||||||
var mu sync.Mutex
 | 
						setupMulti sync.Once // this sets the default, and will always run after the others
 | 
				
			||||||
 | 
						mu         sync.Mutex
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setupStdErrHandler() slog.Handler {
 | 
					func setupStdErrHandler() slog.Handler {
 | 
				
			||||||
	var programLevel = new(slog.LevelVar) // Info by default
 | 
						programLevel := new(slog.LevelVar) // Info by default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	envVar := "DEBUG"
 | 
						envVar := "DEBUG"
 | 
				
			||||||
	if len(ConfigPrefix) > 0 {
 | 
						if len(ConfigPrefix) > 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,15 +27,15 @@ func NewStdLog(key string, debug bool, log *slog.Logger) *stdLoggerish {
 | 
				
			|||||||
	return sl
 | 
						return sl
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (l stdLoggerish) Println(msg ...interface{}) {
 | 
					func (l stdLoggerish) Println(msg ...any) {
 | 
				
			||||||
	l.f(l.key, "msg", msg)
 | 
						l.f(l.key, "msg", msg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (l stdLoggerish) Printf(msg string, args ...interface{}) {
 | 
					func (l stdLoggerish) Printf(msg string, args ...any) {
 | 
				
			||||||
	l.f(l.key, "msg", fmt.Sprintf(msg, args...))
 | 
						l.f(l.key, "msg", fmt.Sprintf(msg, args...))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (l stdLoggerish) Fatalf(msg string, args ...interface{}) {
 | 
					func (l stdLoggerish) Fatalf(msg string, args ...any) {
 | 
				
			||||||
	l.log.Error(l.key, "msg", fmt.Sprintf(msg, args...))
 | 
						l.log.Error(l.key, "msg", fmt.Sprintf(msg, args...))
 | 
				
			||||||
	panic("fatal error") // todo: does this make sense at all?
 | 
						panic("fatal error") // todo: does this make sense at all?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,6 @@ func (m *Metrics) Registry() *prometheus.Registry {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Metrics) Handler() http.Handler {
 | 
					func (m *Metrics) Handler() http.Handler {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	log := logger.NewStdLog("prom http", false, nil)
 | 
						log := logger.NewStdLog("prom http", false, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return promhttp.HandlerFor(m.r, promhttp.HandlerOpts{
 | 
						return promhttp.HandlerFor(m.r, promhttp.HandlerOpts{
 | 
				
			||||||
@@ -46,7 +45,6 @@ func (m *Metrics) Handler() http.Handler {
 | 
				
			|||||||
// the specified port. The server will shutdown and return when
 | 
					// the specified port. The server will shutdown and return when
 | 
				
			||||||
// the provided context is done
 | 
					// the provided context is done
 | 
				
			||||||
func (m *Metrics) ListenAndServe(ctx context.Context, port int) error {
 | 
					func (m *Metrics) ListenAndServe(ctx context.Context, port int) error {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	log := logger.Setup()
 | 
						log := logger.Setup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	srv := &http.Server{
 | 
						srv := &http.Server{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ func (d Duration) MarshalJSON() ([]byte, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *Duration) UnmarshalJSON(b []byte) error {
 | 
					func (d *Duration) UnmarshalJSON(b []byte) error {
 | 
				
			||||||
	var v interface{}
 | 
						var v any
 | 
				
			||||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
						if err := json.Unmarshal(b, &v); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,5 +18,4 @@ func TestDuration(t *testing.T) {
 | 
				
			|||||||
	if foo.Foo.Seconds() != 30 {
 | 
						if foo.Foo.Seconds() != 30 {
 | 
				
			||||||
		t.Fatalf("parsed time.Duration wasn't 30 seconds: %s", foo.Foo)
 | 
							t.Fatalf("parsed time.Duration wasn't 30 seconds: %s", foo.Foo)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -237,7 +237,7 @@ func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (sdktrace.SpanExpor
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		client = otlptracegrpc.NewClient(opts...)
 | 
							client = otlptracegrpc.NewClient(opts...)
 | 
				
			||||||
	case "http/protobuf":
 | 
						case "http/protobuf", "http/json":
 | 
				
			||||||
		opts := []otlptracehttp.Option{
 | 
							opts := []otlptracehttp.Option{
 | 
				
			||||||
			otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
 | 
								otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,6 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestInit(t *testing.T) {
 | 
					func TestInit(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx, cancel := context.WithCancel(context.Background())
 | 
						ctx, cancel := context.WithCancel(context.Background())
 | 
				
			||||||
	defer cancel()
 | 
						defer cancel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,5 +17,4 @@ func TestInit(t *testing.T) {
 | 
				
			|||||||
		t.FailNow()
 | 
							t.FailNow()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer shutdownFn(ctx)
 | 
						defer shutdownFn(ctx)
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ func (lsa *LogScoreAttributes) Value() (driver.Value, error) {
 | 
				
			|||||||
	return json.Marshal(lsa)
 | 
						return json.Marshal(lsa)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (lsa *LogScoreAttributes) Scan(value interface{}) error {
 | 
					func (lsa *LogScoreAttributes) Scan(value any) error {
 | 
				
			||||||
	var source []byte
 | 
						var source []byte
 | 
				
			||||||
	_t := LogScoreAttributes{}
 | 
						_t := LogScoreAttributes{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,8 +14,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var monotonicPool = sync.Pool{
 | 
					var monotonicPool = sync.Pool{
 | 
				
			||||||
	New: func() interface{} {
 | 
						New: func() any {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		log := logger.Setup()
 | 
							log := logger.Setup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var seed int64
 | 
							var seed int64
 | 
				
			||||||
@@ -39,7 +38,6 @@ var monotonicPool = sync.Pool{
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func MakeULID(t time.Time) (*oklid.ULID, error) {
 | 
					func MakeULID(t time.Time) (*oklid.ULID, error) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	mono := monotonicPool.Get().(io.Reader)
 | 
						mono := monotonicPool.Get().(io.Reader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	id, err := oklid.New(oklid.Timestamp(t), mono)
 | 
						id, err := oklid.New(oklid.Timestamp(t), mono)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -168,6 +168,9 @@ func CheckVersion(version, minimumVersion string) bool {
 | 
				
			|||||||
	if version == "dev-snapshot" {
 | 
						if version == "dev-snapshot" {
 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if idx := strings.Index(version, "/"); idx >= 0 {
 | 
				
			||||||
 | 
							version = version[0:idx]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if semver.Compare(version, minimumVersion) < 0 {
 | 
						if semver.Compare(version, minimumVersion) < 0 {
 | 
				
			||||||
		// log.Debug("version too old", "v", cl.Version.Version)
 | 
							// log.Debug("version too old", "v", cl.Version.Version)
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,14 +3,12 @@ package fastlyxff
 | 
				
			|||||||
import "testing"
 | 
					import "testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestFastlyIPRanges(t *testing.T) {
 | 
					func TestFastlyIPRanges(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	fastlyxff, err := New("fastly.json")
 | 
						fastlyxff, err := New("fastly.json")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("could not load test data: %s", err)
 | 
							t.Fatalf("could not load test data: %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data, err := fastlyxff.EchoTrustOption()
 | 
						data, err := fastlyxff.EchoTrustOption()
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("could not parse test data: %s", err)
 | 
							t.Fatalf("could not parse test data: %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -19,5 +17,4 @@ func TestFastlyIPRanges(t *testing.T) {
 | 
				
			|||||||
		t.Logf("only got %d prefixes, expected more", len(data))
 | 
							t.Logf("only got %d prefixes, expected more", len(data))
 | 
				
			||||||
		t.Fail()
 | 
							t.Fail()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user