in coverage/index.go [196:238]
func GetModelInfoFromLocalIndex(resourceId, apiVersion, method, swaggerRepo, indexCacheFile string) (*SwaggerModel, error) {
swaggerRepo, err := filepath.Abs(swaggerRepo)
if err != nil {
return nil, fmt.Errorf("swagger repo path %q is invalid: %+v", swaggerRepo, err)
}
if _, err := os.Stat(swaggerRepo); os.IsNotExist(err) {
return nil, fmt.Errorf("swagger repo path %q is invalid: path does not exist", swaggerRepo)
}
swaggerRepo = strings.TrimSuffix(swaggerRepo, "/")
if !strings.HasSuffix(swaggerRepo, "specification") {
return nil, fmt.Errorf("swagger repo path %q is invalid: must point to \"specification\", e.g., /home/projects/azure-rest-api-specs/specification", swaggerRepo)
}
swaggerRepo += "/"
index, err := GetIndexFromLocalDir(swaggerRepo, indexCacheFile)
if err != nil {
return nil, fmt.Errorf("build index from local dir %s: %+v", swaggerRepo, err)
}
resourceURL := fmt.Sprintf("https://management.azure.com%s?api-version=%s", resourceId, apiVersion)
uRL, err := url.Parse(resourceURL)
if err != nil {
return nil, fmt.Errorf("parsing URL %s: %+v", resourceURL, err)
}
ref, err := index.Lookup(method, *uRL)
if err != nil {
return nil, fmt.Errorf("lookup %s URL %s in index: %+v", method, resourceURL, err)
}
model, err := GetModelInfoFromIndexRef(openapispec.Ref{Ref: *ref}, swaggerRepo)
if err != nil {
return nil, fmt.Errorf("get model %s: %+v", ref, err)
}
if model.ModelName == "" {
return nil, fmt.Errorf("PUT model not found for %s", ref.String())
}
return model, nil
}