decode_test.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package memconservative
  2. import (
  3. "errors"
  4. "io/fs"
  5. "os"
  6. "path/filepath"
  7. "testing"
  8. "github.com/google/go-cmp/cmp"
  9. "github.com/v2fly/v2ray-core/v4/common"
  10. "github.com/v2fly/v2ray-core/v4/common/platform"
  11. "github.com/v2fly/v2ray-core/v4/common/platform/filesystem"
  12. )
  13. const (
  14. geoipURL = "https://raw.githubusercontent.com/v2fly/geoip/release/geoip.dat"
  15. geositeURL = "https://raw.githubusercontent.com/v2fly/domain-list-community/release/dlc.dat"
  16. )
  17. func init() {
  18. wd, err := os.Getwd()
  19. common.Must(err)
  20. tempPath := filepath.Join(wd, "..", "..", "testing", "temp")
  21. geoipPath := filepath.Join(tempPath, "geoip.dat")
  22. geositePath := filepath.Join(tempPath, "geosite.dat")
  23. os.Setenv("v2ray.location.asset", tempPath)
  24. common.Must(os.MkdirAll(tempPath, 0755))
  25. if _, err := os.Stat(platform.GetAssetLocation("geoip.dat")); err != nil && errors.Is(err, fs.ErrNotExist) {
  26. if _, err := os.Stat(geoipPath); err != nil && errors.Is(err, fs.ErrNotExist) {
  27. geoipBytes, err := common.FetchHTTPContent(geoipURL)
  28. common.Must(err)
  29. common.Must(filesystem.WriteFile(geoipPath, geoipBytes))
  30. }
  31. }
  32. if _, err := os.Stat(platform.GetAssetLocation("geosite.dat")); err != nil && errors.Is(err, fs.ErrNotExist) {
  33. if _, err := os.Stat(geositePath); err != nil && errors.Is(err, fs.ErrNotExist) {
  34. geositeBytes, err := common.FetchHTTPContent(geositeURL)
  35. common.Must(err)
  36. common.Must(filesystem.WriteFile(geositePath, geositeBytes))
  37. }
  38. }
  39. }
  40. func TestDecodeGeoIP(t *testing.T) {
  41. filename := platform.GetAssetLocation("geoip.dat")
  42. result, err := Decode(filename, "test")
  43. if err != nil {
  44. t.Error(err)
  45. }
  46. expected := []byte{10, 4, 84, 69, 83, 84, 18, 8, 10, 4, 127, 0, 0, 0, 16, 8}
  47. if cmp.Diff(result, expected) != "" {
  48. t.Errorf("failed to load geoip:test, expected: %v, got: %v", expected, result)
  49. }
  50. }
  51. func TestDecodeGeoSite(t *testing.T) {
  52. filename := platform.GetAssetLocation("geosite.dat")
  53. result, err := Decode(filename, "test")
  54. if err != nil {
  55. t.Error(err)
  56. }
  57. expected := []byte{10, 4, 84, 69, 83, 84, 18, 20, 8, 3, 18, 16, 116, 101, 115, 116, 46, 101, 120, 97, 109, 112, 108, 101, 46, 99, 111, 109}
  58. if cmp.Diff(result, expected) != "" {
  59. t.Errorf("failed to load geosite:test, expected: %v, got: %v", expected, result)
  60. }
  61. }