• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package deps
2
3import (
4	"reflect"
5	"testing"
6
7	"github.com/bazelbuild/buildtools/build"
8)
9
10func TestRuleParser(t *testing.T) {
11	exampleRule := `
12http_archive(
13    name = "com_google_absl",
14    sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40",  # Last updated 2022-05-18
15    strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
16    urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
17)`
18
19	file, err := build.ParseWorkspace("WORKSPACE.bazel", []byte(exampleRule))
20	if err != nil {
21		t.Fatal(err)
22	}
23	rule, ok := HTTPArchiveRule(file.Stmt[0])
24	if !ok {
25		t.Fatal("The first rule encountered is not http_archive")
26	}
27
28	deps, err := ParseHTTPArchiveRule(rule)
29	if err != nil {
30		t.Fatal(err)
31	}
32
33	expected := Entry{
34		Name:        "com_google_absl",
35		SHA256:      "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40",
36		Prefix:      "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
37		URL:         "https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip",
38		LastUpdated: "2022-05-18",
39	}
40	if !reflect.DeepEqual(*deps, expected) {
41		t.Errorf("Parsing returned incorret result, expected:\n  %v\n, got:\n  %v", expected, *deps)
42	}
43}
44
45func TestMultipleRules(t *testing.T) {
46	exampleRules := `
47http_archive(
48    name = "com_google_absl",
49    sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40",  # Last updated 2022-05-18
50    strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
51    urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
52)
53
54irrelevant_call()
55
56http_archive(
57    name = "com_google_protobuf",
58    sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930",  # Last updated 2022-05-18
59    strip_prefix = "protobuf-3.20.1",
60    urls = ["https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.20.1.tar.gz"],
61)
62`
63
64	rules, err := ParseHTTPArchiveRules([]byte(exampleRules))
65	if err != nil {
66		t.Fatal(err)
67	}
68	if len(rules) != 2 {
69		t.Fatalf("Expected 2 rules, got %d", len(rules))
70	}
71	if rules[0].Name != "com_google_absl" || rules[1].Name != "com_google_protobuf" {
72		t.Errorf("Expected the two rules to be com_google_absl and com_google_protobuf, got %s and %s", rules[0].Name, rules[1].Name)
73	}
74}
75
76func TestBazelParseError(t *testing.T) {
77	exampleRule := `
78http_archive(
79    name = "com_google_absl",
80    sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40",  # Last updated 2022-05-18
81    strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
82    urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
83`
84
85	_, err := ParseHTTPArchiveRules([]byte(exampleRule))
86	if err == nil {
87		t.Errorf("Expected parser error")
88	}
89}
90
91func TestMissingField(t *testing.T) {
92	exampleRule := `
93http_archive(
94    name = "com_google_absl",
95    strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
96    urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
97)`
98
99	_, err := ParseHTTPArchiveRules([]byte(exampleRule))
100	if err == nil || err.Error() != "missing the sha256 field" {
101		t.Errorf("Expected the missing sha256 error, got %v", err)
102	}
103}
104