@@ -59,3 +59,43 @@ func TestAPIDownloadArchive(t *testing.T) {
5959 link , _ = url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/archive/master" , user2 .Name , repo .Name ))
6060 MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusBadRequest )
6161}
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