blob: 86ac4d7b6fb99316ee0e280f1c992615bf3b6361 [file] [log] [blame]
/* Copyright 2017 The Bazel Authors. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package golang
import (
"fmt"
"path/filepath"
"strings"
"testing"
"github.com/bazelbuild/bazel-gazelle/config"
"github.com/bazelbuild/bazel-gazelle/language"
"github.com/bazelbuild/bazel-gazelle/repo"
"github.com/bazelbuild/bazel-gazelle/rule"
"github.com/bazelbuild/bazel-gazelle/testtools"
)
func TestImports(t *testing.T) {
for _, tc := range []struct {
desc, want string
wantErr string
stubGoModDownload func(string, []string) ([]byte, error)
stubGoListModules func(string) ([]byte, error)
files []testtools.FileSpec
}{
{
desc: "modules",
files: []testtools.FileSpec{
{
Path: "go.mod",
Content: `
module github.com/bazelbuild/bazel-gazelle
require (
github.com/BurntSushi/toml v0.3.1 // indirect
github.com/bazelbuild/buildtools v0.0.0-20190202002759-027686e28d67
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fork/go-toml v0.0.0-20190116191733-b6c0e53d7304
github.com/fsnotify/fsnotify v1.4.7
github.com/kr/pretty v0.1.0 // indirect
github.com/pelletier/go-toml v1.0.1
github.com/pmezard/go-difflib v1.0.0
golang.org/x/sys v0.0.0-20190122071731-054c452bb702 // indirect
golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/yaml.v2 v2.2.2 // indirect
)
replace (
github.com/pelletier/go-toml => github.com/fork/go-toml v0.0.0-20190425002759-70bc0436ed16
)
`,
}, {
// Note: the sum for x/tools has been deleted to force a call
// to goModDownload.
Path: "go.sum",
Content: `
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/bazelbuild/buildtools v0.0.0-20190202002759-027686e28d67 h1:zS8p6ZRbNVa7QfK3tpoIRDqGzCA2J0uJffaMTWoneac=
github.com/bazelbuild/buildtools v0.0.0-20190202002759-027686e28d67/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/fork/go-toml v0.0.0-20190116191733-b6c0e53d7304 h1:5+8j8FTpnFV4nEImW/ofkzEt8VoOiLXxdYIDsB73T38=
github.com/fork/go-toml v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/fork/go-toml v0.0.0-20190425002759-70bc0436ed16 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/fork/go-toml v0.0.0-20190425002759-70bc0436ed16/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
golang.org/x/sys v0.0.0-20190122071731-054c452bb702 h1:Lk4tbZFnlyPgV+sLgTw5yGfzrlOn9kx4vSombi2FFlY=
golang.org/x/sys v0.0.0-20190122071731-054c452bb702/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
`,
},
},
want: `
go_repository(
name = "com_github_bazelbuild_buildtools",
importpath = "github.com/bazelbuild/buildtools",
sum = "h1:zS8p6ZRbNVa7QfK3tpoIRDqGzCA2J0uJffaMTWoneac=",
version = "v0.0.0-20190202002759-027686e28d67",
)
go_repository(
name = "com_github_burntsushi_toml",
importpath = "github.com/BurntSushi/toml",
sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=",
version = "v0.3.1",
)
go_repository(
name = "com_github_davecgh_go_spew",
importpath = "github.com/davecgh/go-spew",
sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=",
version = "v1.1.1",
)
go_repository(
name = "com_github_fork_go_toml",
importpath = "github.com/fork/go-toml",
sum = "h1:5+8j8FTpnFV4nEImW/ofkzEt8VoOiLXxdYIDsB73T38=",
version = "v0.0.0-20190116191733-b6c0e53d7304",
)
go_repository(
name = "com_github_pelletier_go_toml",
importpath = "github.com/pelletier/go-toml",
replace = "github.com/fork/go-toml",
sum = "h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=",
version = "v0.0.0-20190425002759-70bc0436ed16",
)
go_repository(
name = "in_gopkg_check_v1",
importpath = "gopkg.in/check.v1",
sum = "h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=",
version = "v1.0.0-20180628173108-788fd7840127",
)
go_repository(
name = "in_gopkg_yaml_v2",
importpath = "gopkg.in/yaml.v2",
sum = "h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=",
version = "v2.2.2",
)
go_repository(
name = "org_golang_x_tools",
importpath = "golang.org/x/tools",
sum = "h1:FkAkwuYWQw+IArrnmhGlisKHQF4MsZ2Nu/fX4ttW55o=",
version = "v0.0.0-20190122202912-9c309ee22fab",
)
`,
wantErr: "",
stubGoModDownload: nil,
},
{
desc: "modules-download-error",
files: []testtools.FileSpec{
{
Path: "go.mod",
Content: `
module github.com/bazelbuild/bazel-gazelle
require (
definitely.doesnotexist/ever v0.1.0
)
`,
}, {
Path: "go.sum",
Content: `
definitely.doesnotexist/ever v0.1.0/go.mod h1:HI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuJ=
`,
},
},
want: "",
wantErr: "finding module sums: error from go mod download: failed to download\nError downloading definitely.doesnotexist/ever: Did not exist",
stubGoModDownload: func(dir string, args []string) ([]byte, error) {
return []byte(`{
"Path": "definitely.doesnotexist/ever",
"Version": "0.1.0",
"Error": "Did not exist"
}`), fmt.Errorf("failed to download")
},
},
{
desc: "modules-download-bad-json",
files: []testtools.FileSpec{
{
Path: "go.mod",
Content: `
module github.com/bazelbuild/bazel-gazelle
require (
definitely.doesnotexist/ever v0.1.0
)
`,
}, {
Path: "go.sum",
Content: `
definitely.doesnotexist/ever v0.1.0/go.mod h1:HI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuJ=
`,
},
},
want: "",
wantErr: "finding module sums: error from go mod download: failed to download\nError parsing module for more error information: invalid character 'o' in literal null (expecting 'u')",
stubGoModDownload: func(dir string, args []string) ([]byte, error) {
return []byte(`{
"Path": "definitely.doesnotexist/ever",
"Version": "0.1.0",
"Error": {
"Err": not valid json
}
}`), fmt.Errorf("failed to download")
},
},
{
desc: "list-modules-error",
files: []testtools.FileSpec{
{
Path: "go.mod",
Content: `
module github.com/bazelbuild/bazel-gazelle
require (
definitely.doesnotexist/ever v0.1.0
)
`,
}, {
Path: "go.sum",
Content: `
definitely.doesnotexist/ever v0.1.0/go.mod h1:HI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuJ=
`,
},
},
want: "",
wantErr: "error from go list: failed to download\nError listing definitely.doesnotexist/ever: Did not exist",
stubGoListModules: func(dir string) ([]byte, error) {
return []byte(`{
"Path": "definitely.doesnotexist/ever",
"Version": "0.1.0",
"Error": {"Err": "Did not exist"}
}`), fmt.Errorf("failed to download")
},
},
{
desc: "list-modules-bad-json",
files: []testtools.FileSpec{
{
Path: "go.mod",
Content: `
module github.com/bazelbuild/bazel-gazelle
require (
definitely.doesnotexist/ever v0.1.0
)
`,
}, {
Path: "go.sum",
Content: `
definitely.doesnotexist/ever v0.1.0/go.mod h1:HI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuJ=
`,
},
},
want: "",
wantErr: "error from go list: failed to download\nError parsing module for more error information: invalid character 'n' after object key",
stubGoListModules: func(dir string) ([]byte, error) {
return []byte(`{
"Path": "definitely.doesnotexist/ever",
"Version": "0.1.0",
"Error" not valid json
}`), fmt.Errorf("failed to download")
},
},
{
desc: "work",
files: []testtools.FileSpec{
{
Path: "go.work",
Content: `
go 1.18
use (
./project1
./project2
./project3
)
`,
},
{
Path: "project1/go.mod",
Content: `
module project1
go 1.18
require github.com/vmware/govmomi v0.21.0 // indirect
`,
},
{
Path: "project1/go.sum",
Content: `
github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE=
github.com/google/uuid v0.0.0-20170306145142-6a5e28554805/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/vmware/govmomi v0.21.0 h1:jc8uMuxpcV2xMAA/cnEDlnsIjvqcMra5Y8onh/U3VuY=
github.com/vmware/govmomi v0.21.0/go.mod h1:zbnFoBQ9GIjs2RVETy8CNEpb+L+Lwkjs3XZUL0B3/m0=
github.com/vmware/vmw-guestinfo v0.0.0-20170707015358-25eff159a728/go.mod h1:x9oS4Wk2s2u4tS29nEaDLdzvuHdB19CvSGJjPgkZJNk=
`,
},
{
Path: "project2/go.mod",
Content: `
module project2
go 1.18
require github.com/vmware/govmomi v0.24.0 // indirect
`,
},
{
Path: "project2/go.sum",
Content: `
github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE=
github.com/google/uuid v0.0.0-20170306145142-6a5e28554805/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/vmware/govmomi v0.24.0 h1:G7YFF6unMTG3OY25Dh278fsomVTKs46m2ENlEFSbmbs=
github.com/vmware/govmomi v0.24.0/go.mod h1:Y+Wq4lst78L85Ge/F8+ORXIWiKYqaro1vhAulACy9Lc=
github.com/vmware/vmw-guestinfo v0.0.0-20170707015358-25eff159a728/go.mod h1:x9oS4Wk2s2u4tS29nEaDLdzvuHdB19CvSGJjPgkZJNk=
`,
},
{
Path: "project3/go.mod",
Content: `
module project3
go 1.18
require github.com/vmware/govmomi v0.27.0 // indirect
`,
},
{
Path: "project3/go.sum",
Content: `
github.com/a8m/tree v0.0.0-20210115125333-10a5fd5b637d/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg=
github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE=
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/vmware/govmomi v0.27.0 h1:KoQ8IsLAa7V78s5d7dgpZA8d039GBM83cVxgAq9uWuw=
github.com/vmware/govmomi v0.27.0/go.mod h1:daTuJEcQosNMXYJOeku0qdBJP9SOLLWB3Mqz8THtv6o=
github.com/vmware/vmw-guestinfo v0.0.0-20170707015358-25eff159a728/go.mod h1:x9oS4Wk2s2u4tS29nEaDLdzvuHdB19CvSGJjPgkZJNk=
`,
},
},
want: `
go_repository(
name = "com_github_a8m_tree",
importpath = "github.com/a8m/tree",
sum = "h1:4E8RufAN3UQ/weB6AnQ4y5miZCO0Yco8ZdGId41WuQs=",
version = "v0.0.0-20210115125333-10a5fd5b637d",
)
go_repository(
name = "com_github_davecgh_go_xdr",
importpath = "github.com/davecgh/go-xdr",
sum = "h1:qg9VbHo1TlL0KDM0vYvBG9EY0X0Yku5WYIPoFWt8f6o=",
version = "v0.0.0-20161123171359-e6a2ba005892",
)
go_repository(
name = "com_github_google_uuid",
importpath = "github.com/google/uuid",
sum = "h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=",
version = "v1.2.0",
)
go_repository(
name = "com_github_kr_pretty",
importpath = "github.com/kr/pretty",
sum = "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=",
version = "v0.1.0",
)
go_repository(
name = "com_github_kr_pty",
importpath = "github.com/kr/pty",
sum = "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=",
version = "v1.1.1",
)
go_repository(
name = "com_github_kr_text",
importpath = "github.com/kr/text",
sum = "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=",
version = "v0.1.0",
)
go_repository(
name = "com_github_vmware_govmomi",
importpath = "github.com/vmware/govmomi",
sum = "h1:KoQ8IsLAa7V78s5d7dgpZA8d039GBM83cVxgAq9uWuw=",
version = "v0.27.0",
)
go_repository(
name = "com_github_vmware_vmw_guestinfo",
importpath = "github.com/vmware/vmw-guestinfo",
sum = "h1:sH9mEk+flyDxiUa5BuPiuhDETMbzrt9A20I2wktMvRQ=",
version = "v0.0.0-20170707015358-25eff159a728",
)
`,
wantErr: "",
stubGoModDownload: func(s string, i []string) ([]byte, error) {
return []byte(`
{
"Path": "github.com/a8m/tree",
"Version": "v0.0.0-20210115125333-10a5fd5b637d",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/a8m/tree/@v/v0.0.0-20210115125333-10a5fd5b637d.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/a8m/tree/@v/v0.0.0-20210115125333-10a5fd5b637d.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/a8m/tree/@v/v0.0.0-20210115125333-10a5fd5b637d.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/a8m/tree@v0.0.0-20210115125333-10a5fd5b637d",
"Sum": "h1:4E8RufAN3UQ/weB6AnQ4y5miZCO0Yco8ZdGId41WuQs=",
"GoModSum": "h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg="
}
{
"Path": "github.com/davecgh/go-xdr",
"Version": "v0.0.0-20161123171359-e6a2ba005892",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/davecgh/go-xdr/@v/v0.0.0-20161123171359-e6a2ba005892.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/davecgh/go-xdr/@v/v0.0.0-20161123171359-e6a2ba005892.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/davecgh/go-xdr/@v/v0.0.0-20161123171359-e6a2ba005892.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/davecgh/go-xdr@v0.0.0-20161123171359-e6a2ba005892",
"Sum": "h1:qg9VbHo1TlL0KDM0vYvBG9EY0X0Yku5WYIPoFWt8f6o=",
"GoModSum": "h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE="
}
{
"Path": "github.com/google/uuid",
"Version": "v1.2.0",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/google/uuid/@v/v1.2.0.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/google/uuid/@v/v1.2.0.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/google/uuid/@v/v1.2.0.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/google/uuid@v1.2.0",
"Sum": "h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=",
"GoModSum": "h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo="
}
{
"Path": "github.com/kr/pretty",
"Version": "v0.1.0",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pretty/@v/v0.1.0.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pretty/@v/v0.1.0.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pretty/@v/v0.1.0.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/kr/pretty@v0.1.0",
"Sum": "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=",
"GoModSum": "h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo="
}
{
"Path": "github.com/kr/pty",
"Version": "v1.1.1",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pty/@v/v1.1.1.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pty/@v/v1.1.1.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pty/@v/v1.1.1.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/kr/pty@v1.1.1",
"Sum": "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=",
"GoModSum": "h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ="
}
{
"Path": "github.com/kr/text",
"Version": "v0.1.0",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/text/@v/v0.1.0.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/text/@v/v0.1.0.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/text/@v/v0.1.0.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/kr/text@v0.1.0",
"Sum": "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=",
"GoModSum": "h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI="
}
{
"Path": "github.com/vmware/govmomi",
"Version": "v0.27.0",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/govmomi/@v/v0.27.0.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/govmomi/@v/v0.27.0.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/govmomi/@v/v0.27.0.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/vmware/govmomi@v0.27.0",
"Sum": "h1:KoQ8IsLAa7V78s5d7dgpZA8d039GBM83cVxgAq9uWuw=",
"GoModSum": "h1:daTuJEcQosNMXYJOeku0qdBJP9SOLLWB3Mqz8THtv6o="
}
{
"Path": "github.com/vmware/vmw-guestinfo",
"Version": "v0.0.0-20170707015358-25eff159a728",
"Info": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/vmw-guestinfo/@v/v0.0.0-20170707015358-25eff159a728.info",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/vmw-guestinfo/@v/v0.0.0-20170707015358-25eff159a728.mod",
"Zip": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/vmw-guestinfo/@v/v0.0.0-20170707015358-25eff159a728.zip",
"Dir": "/Users/hhalil/go/pkg/mod/github.com/vmware/vmw-guestinfo@v0.0.0-20170707015358-25eff159a728",
"Sum": "h1:sH9mEk+flyDxiUa5BuPiuhDETMbzrt9A20I2wktMvRQ=",
"GoModSum": "h1:x9oS4Wk2s2u4tS29nEaDLdzvuHdB19CvSGJjPgkZJNk="
}
`), nil
},
stubGoListModules: func(dir string) ([]byte, error) {
return []byte(`
{
"Path": "project1",
"Main": true,
"Dir": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project1",
"GoMod": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project1/go.mod",
"GoVersion": "1.18"
}
{
"Path": "project2",
"Main": true,
"Dir": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project2",
"GoMod": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project2/go.mod",
"GoVersion": "1.18"
}
{
"Path": "project3",
"Main": true,
"Dir": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project3",
"GoMod": "/Users/hhalil/Documents/VMware/mirrors_github_bazel-gazelle/hakan/project3/go.mod",
"GoVersion": "1.18"
}
{
"Path": "github.com/a8m/tree",
"Version": "v0.0.0-20210115125333-10a5fd5b637d",
"Time": "2021-01-15T12:53:33Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/a8m/tree/@v/v0.0.0-20210115125333-10a5fd5b637d.mod"
}
{
"Path": "github.com/davecgh/go-xdr",
"Version": "v0.0.0-20161123171359-e6a2ba005892",
"Time": "2016-11-23T17:13:59Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/davecgh/go-xdr/@v/v0.0.0-20161123171359-e6a2ba005892.mod"
}
{
"Path": "github.com/google/uuid",
"Version": "v1.2.0",
"Time": "2021-01-22T18:20:15Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/google/uuid/@v/v1.2.0.mod"
}
{
"Path": "github.com/kr/pretty",
"Version": "v0.1.0",
"Time": "2018-05-06T08:33:45Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pretty/@v/v0.1.0.mod"
}
{
"Path": "github.com/kr/pty",
"Version": "v1.1.1",
"Time": "2018-01-13T18:08:13Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/pty/@v/v1.1.1.mod"
}
{
"Path": "github.com/kr/text",
"Version": "v0.1.0",
"Time": "2018-05-06T08:24:08Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/kr/text/@v/v0.1.0.mod"
}
{
"Path": "github.com/vmware/govmomi",
"Version": "v0.27.0",
"Time": "2021-10-14T20:30:09Z",
"Indirect": true,
"Dir": "/Users/hhalil/go/pkg/mod/github.com/vmware/govmomi@v0.27.0",
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/govmomi/@v/v0.27.0.mod",
"GoVersion": "1.14"
}
{
"Path": "github.com/vmware/vmw-guestinfo",
"Version": "v0.0.0-20170707015358-25eff159a728",
"Time": "2017-07-07T01:53:58Z",
"Indirect": true,
"GoMod": "/Users/hhalil/go/pkg/mod/cache/download/github.com/vmware/vmw-guestinfo/@v/v0.0.0-20170707015358-25eff159a728.mod"
}
`), nil
},
},
} {
t.Run(tc.desc, func(t *testing.T) {
if tc.stubGoModDownload != nil {
previousGoModDownload := goModDownload
goModDownload = tc.stubGoModDownload
defer func() { goModDownload = previousGoModDownload }()
}
if tc.stubGoListModules != nil {
previousGoListModules := goListModules
goListModules = tc.stubGoListModules
defer func() { goListModules = previousGoListModules }()
}
dir, cleanup := testtools.CreateFiles(t, tc.files)
defer cleanup()
filename := filepath.Join(dir, tc.files[0].Path)
c := &config.Config{Exts: map[string]interface{}{}}
rc, rcCleanup := repo.NewRemoteCache(nil)
defer func() {
if err := rcCleanup(); err != nil {
t.Fatal(err)
}
}()
gl := NewLanguage()
gl.Configure(c, "", nil)
importer := gl.(language.RepoImporter)
result := importer.ImportRepos(language.ImportReposArgs{
Config: c,
Path: filename,
Cache: rc,
})
if tc.wantErr != "" {
if result.Error == nil {
t.Fatalf("Want error %v but got %v", tc.wantErr, result)
}
if result.Error.Error() != tc.wantErr {
t.Fatalf("Want error %v but got %v", tc.wantErr, result.Error)
}
return
} else {
if result.Error != nil {
t.Fatal(result.Error)
}
}
f := rule.EmptyFile("test", "")
for _, r := range result.Gen {
r.Insert(f)
}
got := strings.TrimSpace(string(f.Format()))
want := strings.TrimSpace(tc.want)
if got != want {
t.Errorf("got:\n%s\n\nwant:\n%s\n", got, want)
}
})
}
}