package conf_test import ( "path/filepath" "testing" "github.com/xtls/xray-core/app/geodata" . "github.com/xtls/xray-core/infra/conf" ) func TestGeodataConfig(t *testing.T) { t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources")) creator := func() Buildable { return new(GeodataConfig) } runMultiTestCase(t, []TestCase{ { Input: `{ "cron": "0 4 * * *", "outbound": "proxy", "assets": [ {"url": "https://example.com/geoip.dat", "file": "geoip.dat"}, {"url": "https://example.com/geosite.dat", "file": "geosite.dat"} ] }`, Parser: loadJSON(creator), Output: &geodata.Config{ Cron: "0 4 * * *", Outbound: "proxy", Assets: []*geodata.Asset{ {Url: "https://example.com/geoip.dat", File: "geoip.dat"}, {Url: "https://example.com/geosite.dat", File: "geosite.dat"}, }, }, }, }) } func TestGeodataAssetConfig(t *testing.T) { t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources")) if _, err := (&GeodataAssetConfig{ URL: "https://example.com/geoip.dat", File: "geoip.dat", }).Build(); err != nil { t.Fatal(err) } if _, err := (&GeodataAssetConfig{ URL: "https://example.com/geoip.dat", File: "missing.dat", }).Build(); err == nil { t.Fatal("expected error") } } func TestGeodataAssetConfigInvalidURL(t *testing.T) { t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources")) for _, rawURL := range []string{ "", "http://example.com/geoip.dat", "ftp://example.com/geoip.dat", "https:///geoip.dat", } { if _, err := (&GeodataAssetConfig{ URL: rawURL, File: "geoip.dat", }).Build(); err == nil { t.Fatalf("expected error for %q", rawURL) } } }