Skip to content
Snippets Groups Projects
Commit 97955ab1 authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

add integration tests for file transfer service

parent b63d91f7
Branches
Tags
No related merge requests found
Showing
with 107 additions and 16 deletions
......@@ -35,10 +35,7 @@ func prepareJWTToken(request folderTokenRequest) (string,error) {
}
func folderTokenResponce(token string) []byte{
var response folderToken
response.Token = token
answer,_ := utils.MapToJson(response)
return answer
return []byte(token)
}
func checkBeamtimeToken(request folderTokenRequest) error {
......@@ -53,9 +50,22 @@ func checkBeamtimeToken(request folderTokenRequest) error {
}
func routeFolderToken(w http.ResponseWriter, r *http.Request) {
func extractFolderTokenrequest(r *http.Request) (folderTokenRequest,error) {
var request folderTokenRequest
err := utils.ExtractRequest(r,&request)
if err != nil {
return folderTokenRequest{},err
}
if len(request.Folder)==0 ||len(request.BeamtimeId)==0 || len(request.Token) == 0 {
return folderTokenRequest{},errors.New("some request fields are empty")
}
return request,nil
}
func routeFolderToken(w http.ResponseWriter, r *http.Request) {
request, err := extractFolderTokenrequest(r)
if err != nil {
utils.WriteServerError(w,err,http.StatusBadRequest)
return
......
......@@ -2,7 +2,6 @@ package server
import (
"asapo_common/utils"
"encoding/json"
"github.com/stretchr/testify/assert"
"io/ioutil"
"net/http"
......@@ -17,6 +16,8 @@ var fodlerTokenTests = [] struct {
}{
{"11111111", prepareToken("11111111"),http.StatusOK,"beamtime found"},
{"11111111", prepareToken("11111112"),http.StatusUnauthorized,"wrong token"},
{"11111111", prepareToken("11111111"),http.StatusBadRequest,"bad request"},
}
func TestFolderToken(t *testing.T) {
......@@ -24,13 +25,13 @@ func TestFolderToken(t *testing.T) {
root_folder := "/abc/def"
authJWT = utils.NewJWTAuth("secret")
request := makeRequest(folderTokenRequest{root_folder,test.beamtime_id,test.token})
if test.status == http.StatusBadRequest {
request =makeRequest(authorizationRequest{})
}
w := doPostRequest("/folder",request)
if test.status == http.StatusOK {
body, _ := ioutil.ReadAll(w.Body)
var jwt_token folderToken
json.Unmarshal(body, &jwt_token)
_,token,_:=utils.SplitAuthToken(jwt_token.Token)
claims,_ := utils.CheckJWTToken(token,"secret")
claims,_ := utils.CheckJWTToken(string(body),"secret")
var extra_claim utils.FolderTokenTokenExtraClaim
utils.MapToStruct(claims.(*utils.CustomClaims).ExtraClaims.(map[string]interface{}), &extra_claim)
assert.Equal(t, root_folder, extra_claim.RootFolder, test.message)
......
......@@ -112,7 +112,7 @@ func (t JWTAuth) GenerateToken(val ...interface{}) (string, error) {
return "", err
}
return "Bearer " + tokenString, nil
return tokenString, nil
}
func ProcessJWTAuth(fn http.HandlerFunc, key string) http.HandlerFunc {
......
......@@ -26,7 +26,7 @@ func TestGenerateJWTToken(t *testing.T) {
a := NewJWTAuth("hi")
token, _ := a.GenerateToken((&CustomClaims{Duration: 0, ExtraClaims: nil}))
assert.Equal(t, "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJEdXJhdGlvbiI"+
assert.Equal(t, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJEdXJhdGlvbiI"+
"6MCwiRXh0cmFDbGFpbXMiOm51bGx9.JJcqNZciIDILk-A2sJZCY1sND458bcjNv6tXC2jxric",
token, "jwt token")
......@@ -60,11 +60,11 @@ func TestProcessJWTAuth(t *testing.T) {
token, _ := a.GenerateToken((&CustomClaims{Duration: test.Duration, ExtraClaims: &claim}))
if test.Mode == "header" {
req.Header.Add("Authorization", token)
req.Header.Add("Authorization", "Bearer "+token)
}
if test.Mode == "cookie" {
c := http.Cookie{Name: "Authorization", Value: token}
c := http.Cookie{Name: "Authorization", Value: "Bearer "+token}
req.AddCookie(&c)
}
......
......@@ -52,7 +52,7 @@ func routeFileTransfer(w http.ResponseWriter, r *http.Request) {
return
}
_, file := path.Split(fullName)
w.Header().Set("Content-Disposition", "attachment; filename="+file)
w.Header().Set("Content-Disposition", "attachment; filename=\""+file+"\"")
log.Debug("Transferring file " + fullName)
......
......@@ -45,7 +45,7 @@ func prepareToken(folder string) string{
func doPostRequest(path string,buf string,token string) *httptest.ResponseRecorder {
mux := utils.NewRouter(listRoutes)
req, _ := http.NewRequest("POST", path, strings.NewReader(buf))
req.Header.Add("Authorization", token)
req.Header.Add("Authorization", "Bearer "+token)
w := httptest.NewRecorder()
utils.ProcessJWTAuth(mux.ServeHTTP, "key")(w,req)
return w
......
......@@ -29,6 +29,9 @@ add_subdirectory(spd_logger)
add_subdirectory(producer)
add_subdirectory(file_transfer_service)
if (UNIX)
add_subdirectory(high_avail)
endif()
......
add_subdirectory(rest_api)
set(TARGET_NAME file_transfer_rest_api)
################################
# Testing
################################
prepare_asapo()
add_script_test("${TARGET_NAME}" "" nomem)
#!/usr/bin/env bash
set -e
trap Cleanup EXIT
file_transfer_folder=/tmp/asapo/file_transfer/files
Cleanup() {
echo cleanup
nomad stop authorizer
nomad stop file_transfer
rm -rf $file_transfer_folder aaa big_file
}
nomad run authorizer.nmd
nomad run file_transfer.nmd
sleep 1
token=bnCXpOdBV90wU1zybEw1duQNSORuwaKz6oDHqmL35p0= #token for aaa
folder_token=`curl --silent --data "{\"Folder\":\"$file_transfer_folder\",\"BeamtimeId\":\"aaa\",\"Token\":\"$token\"}" 127.0.0.1:5007/folder`
mkdir -p $file_transfer_folder
echo hello > $file_transfer_folder/aaa
curl -o aaa --silent -H "Authorization: Bearer ${folder_token}" --data "{\"Folder\":\"$file_transfer_folder\",\"FileName\":\"aaa\",\"Token\":\"$folder_token\"}" 127.0.0.1:5008/transfer --stderr - | tee /dev/stderr
cat aaa | grep hello
dd if=/dev/zero of=$file_transfer_folder/big_file bs=1 count=0 seek=5368709120
curl -vvv -o big_file -H "Authorization: Bearer ${folder_token}" --data "{\"Folder\":\"$file_transfer_folder\",\"FileName\":\"big_file\",\"Token\":\"$folder_token\"}" 127.0.0.1:5008/transfer --stderr - | tee /dev/stderr
ls -ln big_file | awk '{ print $5 }' | tee /dev/stderr | grep 5368709120
SET file_transfer_folder=c:\\tmp\\asapo\\file_transfer\\files
c:\opt\consul\nomad run authorizer.nmd
c:\opt\consul\nomad run file_transfer.nmd
ping 1.0.0.0 -n 1 -w 100 > nul
set token=bnCXpOdBV90wU1zybEw1duQNSORuwaKz6oDHqmL35p0=
C:\Curl\curl.exe --silent --data "{\"Folder\":\"%file_transfer_folder%\",\"BeamtimeId\":\"aaa\",\"Token\":\"%token%\"}" 127.0.0.1:5007/folder > token
set /P folder_token=< token
mkdir %file_transfer_folder%
echo hello > %file_transfer_folder%\aaa
C:\Curl\curl.exe --silent -H "Authorization: Bearer %folder_token%" --data "{\"Folder\":\"%file_transfer_folder%\",\"FileName\":\"aaa\",\"Token\":\"%folder_token%\"}" 127.0.0.1:5008/transfer --stderr - | findstr hello || goto :error
goto :clean
:error
call :clean
exit /b 1
:clean
c:\opt\consul\nomad stop authorizer
c:\opt\consul\nomad stop file_transfer
rmdir /S /Q %file_transfer_folder%
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment