@@ -59,3 +59,43 @@ func TestAPIDownloadArchive(t *testing.T) {
59
59
link , _ = url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/archive/master" , user2 .Name , repo .Name ))
60
60
MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusBadRequest )
61
61
}
62
+
63
+ func TestAPIDownloadArchive2 (t * testing.T ) {
64
+ defer tests .PrepareTestEnv (t )()
65
+
66
+ repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
67
+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
68
+ session := loginUser (t , user2 .LowerName )
69
+ token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeReadRepository )
70
+
71
+ link , _ := url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/zipball/master" , user2 .Name , repo .Name ))
72
+ resp := MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusOK )
73
+ bs , err := io .ReadAll (resp .Body )
74
+ assert .NoError (t , err )
75
+ assert .Len (t , bs , 320 )
76
+
77
+ link , _ = url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/tarball/master" , user2 .Name , repo .Name ))
78
+ resp = MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusOK )
79
+ bs , err = io .ReadAll (resp .Body )
80
+ assert .NoError (t , err )
81
+ assert .Len (t , bs , 266 )
82
+
83
+ // Must return a link to a commit ID as the "immutable" archive link
84
+ linkHeaderRe := regexp .MustCompile (`^<(https?://.*/api/v1/repos/user2/repo1/archive/[a-f0-9]+\.tar\.gz.*)>; rel="immutable"$` )
85
+ m := linkHeaderRe .FindStringSubmatch (resp .Header ().Get ("Link" ))
86
+ assert .NotEmpty (t , m [1 ])
87
+ resp = MakeRequest (t , NewRequest (t , "GET" , m [1 ]).AddTokenAuth (token ), http .StatusOK )
88
+ bs2 , err := io .ReadAll (resp .Body )
89
+ assert .NoError (t , err )
90
+ // The locked URL should give the same bytes as the non-locked one
91
+ assert .EqualValues (t , bs , bs2 )
92
+
93
+ link , _ = url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/bundle/master" , user2 .Name , repo .Name ))
94
+ resp = MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusOK )
95
+ bs , err = io .ReadAll (resp .Body )
96
+ assert .NoError (t , err )
97
+ assert .Len (t , bs , 382 )
98
+
99
+ link , _ = url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/archive/master" , user2 .Name , repo .Name ))
100
+ MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusBadRequest )
101
+ }
0 commit comments