mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
We need to know upstream version to decide which API endpoints we can use, metrics don't change between versions so they allow us to do that without any prior knowlage or assumptions
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package mock
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
|
|
httpmock "gopkg.in/jarcoal/httpmock.v1"
|
|
)
|
|
|
|
// GetAbsoluteMockPath returns absolute path for given mock file
|
|
func GetAbsoluteMockPath(filename string, version string) string {
|
|
_, f, _, _ := runtime.Caller(0)
|
|
cwd := filepath.Dir(f)
|
|
return path.Join(cwd, version, filename)
|
|
}
|
|
|
|
// RegisterURL for given url and return 200 status register mock http responder
|
|
func RegisterURL(url string, version string, filename string) {
|
|
fullPath := GetAbsoluteMockPath(filename, version)
|
|
mockJSON, err := ioutil.ReadFile(fullPath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if len(mockJSON) == 0 {
|
|
panic(fmt.Errorf("empty mock file '%s'", fullPath))
|
|
}
|
|
httpmock.RegisterResponder("GET", url, httpmock.NewBytesResponder(200, mockJSON))
|
|
}
|
|
|
|
// ListAllMocks will return a list of all mock versions we have files for
|
|
func ListAllMocks() []string {
|
|
_, f, _, _ := runtime.Caller(0)
|
|
cwd := filepath.Dir(f)
|
|
|
|
dirents, err := ioutil.ReadDir(cwd)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
dirs := []string{}
|
|
for _, dirent := range dirents {
|
|
if dirent.IsDir() {
|
|
_, err := os.Stat(path.Join(cwd, dirent.Name(), "api"))
|
|
if err == nil {
|
|
dirs = append(dirs, dirent.Name())
|
|
}
|
|
}
|
|
}
|
|
return dirs
|
|
}
|
|
|
|
// ListAllMockURIs returns a list of mock APIs as file:// URIs
|
|
func ListAllMockURIs() []string {
|
|
uris := []string{}
|
|
_, f, _, _ := runtime.Caller(0)
|
|
cwd := filepath.Dir(f)
|
|
for _, version := range ListAllMocks() {
|
|
uris = append(uris, "file://"+path.Join(cwd, version))
|
|
}
|
|
return uris
|
|
}
|