Skip to content

Commit 15ae4df

Browse files
committed
add testcase and make generation check fail if invalid generation is provided
1 parent 53fded9 commit 15ae4df

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

get_gcs.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"net/url"
77
"os"
88
"path/filepath"
9-
"regexp"
109
"strconv"
1110
"strings"
1211

@@ -135,8 +134,7 @@ func (g *GCSGetter) GetFile(dst string, u *url.URL) error {
135134
func (g *GCSGetter) getObject(ctx context.Context, client *storage.Client, dst, bucket, object, fragment string) error {
136135
var rc *storage.Reader
137136
var err error
138-
fragmentHasGeneration := regexp.MustCompile("^\\d+$").MatchString(fragment)
139-
if fragmentHasGeneration {
137+
if fragment != "" {
140138
generation, err := strconv.ParseInt(fragment, 10, 64)
141139
if err != nil {
142140
return err

get_gcs_test.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package getter
22

33
import (
4+
"io/ioutil"
45
"net/url"
56
"os"
67
"path/filepath"
@@ -88,6 +89,47 @@ func TestGCSGetter_GetFile(t *testing.T) {
8889
assertContents(t, dst, "# Main\n")
8990
}
9091

92+
func TestGCSGetter_GetGenerationFile(t *testing.T) {
93+
defer initGCPCredentials(t)()
94+
95+
g := new(GCSGetter)
96+
dst := tempTestFile(t)
97+
defer os.RemoveAll(filepath.Dir(dst))
98+
99+
// Download
100+
err := g.GetFile(
101+
dst, testURL("https://www.googleapis.com/storage/v1/go-getter-testcase-data/DO_NOT_DELETE/generation_test.txt#1614317688843055"))
102+
if err != nil {
103+
t.Fatalf("err: %s", err)
104+
}
105+
106+
// Verify the main file exists
107+
content, err := ioutil.ReadFile(dst)
108+
if err != nil {
109+
t.Fatalf("err: %s", err)
110+
}
111+
if string(content) != "a" {
112+
t.Fatalf("expected file contents from generation to be `a` but got `%s`", content)
113+
}
114+
115+
// Download
116+
err = g.GetFile(
117+
dst, testURL("https://www.googleapis.com/storage/v1/go-getter-testcase-data/DO_NOT_DELETE/generation_test.txt#1614317705239142"))
118+
if err != nil {
119+
t.Fatalf("err: %s", err)
120+
}
121+
122+
// Verify the main file exists
123+
content, err = ioutil.ReadFile(dst)
124+
if err != nil {
125+
t.Fatalf("err: %s", err)
126+
}
127+
if string(content) != "b" {
128+
t.Fatalf("expected file contents from generation to be `a` but got `%s`", content)
129+
}
130+
131+
}
132+
91133
func TestGCSGetter_GetFile_notfound(t *testing.T) {
92134
g := new(GCSGetter)
93135
dst := tempTestFile(t)
@@ -180,7 +222,7 @@ func TestGCSGetter_Url(t *testing.T) {
180222
t.Fatalf("expected forced protocol to be gcs")
181223
}
182224

183-
bucket, path, err := g.parseURL(u)
225+
bucket, path, _, err := g.parseURL(u)
184226

185227
if err != nil {
186228
t.Fatalf("err: %s", err)

0 commit comments

Comments
 (0)