| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- package geodata_test
- import (
- "errors"
- "io/fs"
- "os"
- "path/filepath"
- "runtime"
- "testing"
- "github.com/v2fly/v2ray-core/v4/common"
- "github.com/v2fly/v2ray-core/v4/common/platform/filesystem"
- "github.com/v2fly/v2ray-core/v4/infra/conf/geodata"
- _ "github.com/v2fly/v2ray-core/v4/infra/conf/geodata/memconservative"
- _ "github.com/v2fly/v2ray-core/v4/infra/conf/geodata/standard"
- )
- func init() {
- const (
- geoipURL = "https://raw.githubusercontent.com/v2fly/geoip/release/geoip.dat"
- geositeURL = "https://raw.githubusercontent.com/v2fly/domain-list-community/release/dlc.dat"
- )
- wd, err := os.Getwd()
- common.Must(err)
- tempPath := filepath.Join(wd, "..", "..", "..", "testing", "temp")
- geoipPath := filepath.Join(tempPath, "geoip.dat")
- geositePath := filepath.Join(tempPath, "geosite.dat")
- os.Setenv("v2ray.location.asset", tempPath)
- if _, err := os.Stat(geoipPath); err != nil && errors.Is(err, fs.ErrNotExist) {
- common.Must(os.MkdirAll(tempPath, 0755))
- geoipBytes, err := common.FetchHTTPContent(geoipURL)
- common.Must(err)
- common.Must(filesystem.WriteFile(geoipPath, geoipBytes))
- }
- if _, err := os.Stat(geositePath); err != nil && errors.Is(err, fs.ErrNotExist) {
- common.Must(os.MkdirAll(tempPath, 0755))
- geositeBytes, err := common.FetchHTTPContent(geositeURL)
- common.Must(err)
- common.Must(filesystem.WriteFile(geositePath, geositeBytes))
- }
- }
- func BenchmarkStandardLoaderGeoIP(b *testing.B) {
- standardLoader, err := geodata.GetGeoDataLoader("standard")
- common.Must(err)
- m1 := runtime.MemStats{}
- m2 := runtime.MemStats{}
- runtime.ReadMemStats(&m1)
- standardLoader.LoadGeoIP("cn")
- standardLoader.LoadGeoIP("us")
- standardLoader.LoadGeoIP("private")
- runtime.ReadMemStats(&m2)
- b.ReportMetric(float64(m2.Alloc-m1.Alloc)/1024/1024, "MiB(GeoIP-Alloc)")
- b.ReportMetric(float64(m2.TotalAlloc-m1.TotalAlloc)/1024/1024, "MiB(GeoIP-TotalAlloc)")
- }
- func BenchmarkStandardLoaderGeoSite(b *testing.B) {
- standardLoader, err := geodata.GetGeoDataLoader("standard")
- common.Must(err)
- m3 := runtime.MemStats{}
- m4 := runtime.MemStats{}
- runtime.ReadMemStats(&m3)
- standardLoader.LoadGeoSite("cn")
- standardLoader.LoadGeoSite("geolocation-!cn")
- standardLoader.LoadGeoSite("private")
- runtime.ReadMemStats(&m4)
- b.ReportMetric(float64(m4.Alloc-m3.Alloc)/1024/1024, "MiB(GeoSite-Alloc)")
- b.ReportMetric(float64(m4.TotalAlloc-m3.TotalAlloc)/1024/1024, "MiB(GeoSite-TotalAlloc)")
- }
- func BenchmarkMemconservativeLoaderGeoIP(b *testing.B) {
- standardLoader, err := geodata.GetGeoDataLoader("memconservative")
- common.Must(err)
- m1 := runtime.MemStats{}
- m2 := runtime.MemStats{}
- runtime.ReadMemStats(&m1)
- standardLoader.LoadGeoIP("cn")
- standardLoader.LoadGeoIP("us")
- standardLoader.LoadGeoIP("private")
- runtime.ReadMemStats(&m2)
- b.ReportMetric(float64(m2.Alloc-m1.Alloc)/1024, "KiB(GeoIP-Alloc)")
- b.ReportMetric(float64(m2.TotalAlloc-m1.TotalAlloc)/1024/1024, "MiB(GeoIP-TotalAlloc)")
- }
- func BenchmarkMemconservativeLoaderGeoSite(b *testing.B) {
- standardLoader, err := geodata.GetGeoDataLoader("memconservative")
- common.Must(err)
- m3 := runtime.MemStats{}
- m4 := runtime.MemStats{}
- runtime.ReadMemStats(&m3)
- standardLoader.LoadGeoSite("cn")
- standardLoader.LoadGeoSite("geolocation-!cn")
- standardLoader.LoadGeoSite("private")
- runtime.ReadMemStats(&m4)
- b.ReportMetric(float64(m4.Alloc-m3.Alloc)/1024, "KiB(GeoSite-Alloc)")
- b.ReportMetric(float64(m4.TotalAlloc-m3.TotalAlloc)/1024/1024, "MiB(GeoSite-TotalAlloc)")
- }
- func BenchmarkAllLoader(b *testing.B) {
- type testingProfileForLoader struct {
- name string
- }
- testCase := []testingProfileForLoader{
- {"standard"},
- {"memconservative"},
- }
- for _, v := range testCase {
- b.Run(v.name, func(b *testing.B) {
- b.Run("Geosite", func(b *testing.B) {
- loader, err := geodata.GetGeoDataLoader(v.name)
- if err != nil {
- b.Fatal(err)
- }
- m3 := runtime.MemStats{}
- m4 := runtime.MemStats{}
- runtime.ReadMemStats(&m3)
- loader.LoadGeoSite("cn")
- loader.LoadGeoSite("geolocation-!cn")
- loader.LoadGeoSite("private")
- runtime.ReadMemStats(&m4)
- b.ReportMetric(float64(m4.Alloc-m3.Alloc)/1024, "KiB(GeoSite-Alloc)")
- b.ReportMetric(float64(m4.TotalAlloc-m3.TotalAlloc)/1024/1024, "MiB(GeoSite-TotalAlloc)")
- })
- b.Run("GeoIP", func(b *testing.B) {
- loader, err := geodata.GetGeoDataLoader(v.name)
- if err != nil {
- b.Fatal(err)
- }
- m1 := runtime.MemStats{}
- m2 := runtime.MemStats{}
- runtime.ReadMemStats(&m1)
- loader.LoadGeoIP("cn")
- loader.LoadGeoIP("us")
- loader.LoadGeoIP("private")
- runtime.ReadMemStats(&m2)
- b.ReportMetric(float64(m2.Alloc-m1.Alloc)/1024/1024, "MiB(GeoIP-Alloc)")
- b.ReportMetric(float64(m2.TotalAlloc-m1.TotalAlloc)/1024/1024, "MiB(GeoIP-TotalAlloc)")
- })
- })
- }
- }
|