Skip to content

Commit 8ad5a24

Browse files
authored
fix: fix data race in TagBytesN unit test (#329)
Signed-off-by: Lixia (Sylvia) Lei <lixlei@microsoft.com>
1 parent 34e7e6f commit 8ad5a24

File tree

1 file changed

+40
-14
lines changed

1 file changed

+40
-14
lines changed

content_test.go

+40-14
Original file line numberDiff line numberDiff line change
@@ -1785,7 +1785,7 @@ func TestTagBytesN_Memory(t *testing.T) {
17851785
}
17861786

17871787
ctx := context.Background()
1788-
// test TagBytes with no reference
1788+
// test TagBytesN with no reference
17891789
gotDesc, err := oras.TagBytesN(ctx, s, mediaType, content, nil, oras.DefaultTagBytesNOptions)
17901790
if err != nil {
17911791
t.Fatal("oras.TagBytes() error =", err)
@@ -1809,7 +1809,7 @@ func TestTagBytesN_Memory(t *testing.T) {
18091809
t.Errorf("Memory.Fetch() = %v, want %v", got, content)
18101810
}
18111811

1812-
// test TagBytes with multiple references
1812+
// test TagBytesN with multiple references
18131813
refs := []string{"foo", "bar", "baz"}
18141814
gotDesc, err = oras.TagBytesN(ctx, s, mediaType, content, refs, oras.DefaultTagBytesNOptions)
18151815
if err != nil {
@@ -1843,7 +1843,7 @@ func TestTagBytesN_Memory(t *testing.T) {
18431843
t.Errorf("Memory.Fetch() = %v, want %v", got, content)
18441844
}
18451845

1846-
// test TagBytes with empty media type and multiple references
1846+
// test TagBytesN with empty media type and multiple references
18471847
gotDesc, err = oras.TagBytesN(ctx, s, "", content, refs, oras.DefaultTagBytesNOptions)
18481848
if err != nil {
18491849
t.Fatal("oras.TagBytes() error =", err)
@@ -1876,7 +1876,7 @@ func TestTagBytesN_Memory(t *testing.T) {
18761876
t.Errorf("Memory.Fetch() = %v, want %v", got, content)
18771877
}
18781878

1879-
// test TagBytes with empty content and multiple references
1879+
// test TagBytesN with empty content and multiple references
18801880
gotDesc, err = oras.TagBytesN(ctx, s, mediaType, nil, refs, oras.DefaultTagBytesNOptions)
18811881
if err != nil {
18821882
t.Fatal("oras.TagBytes() error =", err)
@@ -1918,7 +1918,6 @@ func TestTagBytesN_Repository(t *testing.T) {
19181918
Digest: digest.FromBytes(index),
19191919
Size: int64(len(index)),
19201920
}
1921-
var gotIndex []byte
19221921
refFoo := "foo"
19231922
refBar := "bar"
19241923
refs := []string{refFoo, refBar}
@@ -1936,11 +1935,10 @@ func TestTagBytesN_Repository(t *testing.T) {
19361935
if _, err := buf.ReadFrom(r.Body); err != nil {
19371936
t.Errorf("fail to read: %v", err)
19381937
}
1939-
gotIndex = buf.Bytes()
19401938
w.Header().Set("Docker-Content-Digest", indexDesc.Digest.String())
19411939
w.WriteHeader(http.StatusCreated)
19421940
return
1943-
case r.Method == http.MethodHead &&
1941+
case (r.Method == http.MethodHead || r.Method == http.MethodGet) &&
19441942
(r.URL.Path == "/v2/test/manifests/"+indexDesc.Digest.String() ||
19451943
r.URL.Path == "/v2/test/manifests/"+refFoo ||
19461944
r.URL.Path == "/v2/test/manifests/"+refBar):
@@ -1952,6 +1950,11 @@ func TestTagBytesN_Repository(t *testing.T) {
19521950
w.Header().Set("Content-Type", indexDesc.MediaType)
19531951
w.Header().Set("Docker-Content-Digest", indexDesc.Digest.String())
19541952
w.Header().Set("Content-Length", strconv.Itoa(int(indexDesc.Size)))
1953+
if r.Method == http.MethodGet {
1954+
if _, err := w.Write(index); err != nil {
1955+
t.Errorf("failed to write %q: %v", r.URL, err)
1956+
}
1957+
}
19551958
default:
19561959
t.Errorf("unexpected access: %s %s", r.Method, r.URL)
19571960
w.WriteHeader(http.StatusForbidden)
@@ -1970,20 +1973,31 @@ func TestTagBytesN_Repository(t *testing.T) {
19701973
repo.PlainHTTP = true
19711974
ctx := context.Background()
19721975

1973-
// test TagBytes with no reference
1976+
// test TagBytesN with no reference
19741977
gotDesc, err := oras.TagBytesN(ctx, repo, indexMediaType, index, nil, oras.DefaultTagBytesNOptions)
19751978
if err != nil {
19761979
t.Fatal("oras.TagBytes() error =", err)
19771980
}
19781981
if !reflect.DeepEqual(gotDesc, indexDesc) {
19791982
t.Errorf("oras.TagBytes() = %v, want %v", gotDesc, indexDesc)
19801983
}
1981-
if !bytes.Equal(gotIndex, index) {
1982-
t.Errorf("oras.TagBytes() = %v, want %v", gotIndex, index)
1984+
rc, err := repo.Fetch(ctx, gotDesc)
1985+
if err != nil {
1986+
t.Fatal("Repository.Fetch() error =", err)
1987+
}
1988+
got, err := io.ReadAll(rc)
1989+
if err != nil {
1990+
t.Fatal("Repository.Fetch().Read() error =", err)
1991+
}
1992+
err = rc.Close()
1993+
if err != nil {
1994+
t.Error("Repository.Fetch().Close() error =", err)
1995+
}
1996+
if !bytes.Equal(got, index) {
1997+
t.Errorf("Repository.Fetch() = %v, want %v", got, index)
19831998
}
19841999

1985-
// test TagBytes with multiple references
1986-
gotIndex = nil
2000+
// test TagBytesN with multiple references
19872001
gotDesc, err = oras.TagBytesN(ctx, repo, indexMediaType, index, refs, oras.DefaultTagBytesNOptions)
19882002
if err != nil {
19892003
t.Fatal("oras.TagBytes() error =", err)
@@ -2000,8 +2014,20 @@ func TestTagBytesN_Repository(t *testing.T) {
20002014
t.Fatalf("oras.TagBytes() = %v, want %v", gotDesc, indexDesc)
20012015
}
20022016
}
2003-
if !bytes.Equal(gotIndex, index) {
2004-
t.Errorf("oras.TagBytes() = %v, want %v", gotIndex, index)
2017+
rc, err = repo.Fetch(ctx, gotDesc)
2018+
if err != nil {
2019+
t.Fatal("Repository.Fetch() error =", err)
2020+
}
2021+
got, err = io.ReadAll(rc)
2022+
if err != nil {
2023+
t.Fatal("Repository.Fetch().Read() error =", err)
2024+
}
2025+
err = rc.Close()
2026+
if err != nil {
2027+
t.Error("Repository.Fetch().Close() error =", err)
2028+
}
2029+
if !bytes.Equal(got, index) {
2030+
t.Errorf("Repository.Fetch() = %v, want %v", got, index)
20052031
}
20062032
}
20072033

0 commit comments

Comments
 (0)