mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-14 09:25:43 +01:00
768 lines
21 KiB
Markdown
768 lines
21 KiB
Markdown
---
|
|
title: SCM-Manager v2 Test Cases
|
|
---
|
|
|
|
Describes the expected behaviour for SCMM v2 REST Resources using manual tests.
|
|
|
|
The following states general test cases per HTTP Method and en expected return code as well as exemplary curl calls.
|
|
Resource-specifics are stated
|
|
|
|
## Test Cases
|
|
|
|
### GET
|
|
|
|
- Collection Resource (e.g. `/users`)
|
|
- Without parameters -> 200
|
|
- Parameters
|
|
- `?pageSize=1` -> Only one embedded element, pageTotal reflects the correct number of pages, `last` link points to last page.
|
|
- `?pageSize=1&page=1` -> `next` link points to page 0 ; `prev` link points to page 2
|
|
- `?sortBy=admin` -> Sorted by `admin` field of embedded objects
|
|
- `?sortBy=admin&desc=true` -> Invert sorting
|
|
- Individual Resource (e.g. `/users/scmadmin`)
|
|
- Exists -> 200
|
|
- Not Existings -> 404
|
|
- Known Field (e.g. `?fields=name`) returns only name field
|
|
- Unknown field (e.g. `?fields=nam`) returns empty object
|
|
- without permission (individual and collection (TODO)) -> 401
|
|
|
|
### POST
|
|
|
|
- not existing -> 204
|
|
- existing -> 409
|
|
- without permission -> 401
|
|
|
|
### PUT
|
|
|
|
- existing -> 204
|
|
- lastModified is updated
|
|
- lastModified & creationDate cannot be overwritten by client
|
|
- not exist -> 404
|
|
- Change ID / Name (the one from the URL in the body) -> 400
|
|
- Partial PUT (Set only one field, for example) -> Set all other fields to null or return 400?
|
|
- without permission -> 401
|
|
- Change unmodifiable fields
|
|
- ID/Name --> 400
|
|
- creationDate, lastModified --> 200 is liberally ignored
|
|
- Additional unmodifiable fields per resource, see examples
|
|
|
|
### DELETE
|
|
|
|
- existing -> 204
|
|
- not existing -> 204
|
|
- without permission -> 401
|
|
|
|
## Exemplary calls & Resource specific test cases
|
|
|
|
In order to extend those tests to other Resources, have a look at the rest docs. Note that the Content Type is specific to each resource as well.
|
|
|
|
After calling `mvn -pl scm-webapp compile -P doc` the docs are available at `scm-webapp/target/restdocs/index.html`.
|
|
|
|
### Users
|
|
|
|
#### GET
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/users?sortBy=admin&desc=true"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/users/scmadmin?fields=name,_links"
|
|
```
|
|
|
|
#### POST
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"properties": null,
|
|
"active": true,
|
|
"admin": false,
|
|
"creationDate": 1527510477501,
|
|
"displayName": "xyz",
|
|
"lastModified": null,
|
|
"mail": "x@abcde.cd",
|
|
"name": "xyz",
|
|
"password": "pwd123",
|
|
"type": "xml"
|
|
}' \
|
|
--header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/
|
|
```
|
|
|
|
#### PUT
|
|
|
|
- Change unmodifiable fields
|
|
- type? -> can be overwritten right now
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"properties": null,
|
|
"active": true,
|
|
"admin": false,
|
|
"creationDate": 1527510477501,
|
|
"displayName": "xyz",
|
|
"lastModified": null,
|
|
"mail": "x@abcde.cd",
|
|
"name": "xyz",
|
|
"password": "pwd123",
|
|
"type": "xml"
|
|
}' \
|
|
--header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/xyz
|
|
```
|
|
|
|
#### DELETE
|
|
|
|
```bash
|
|
curl -X DELETE -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/users/xyz
|
|
```
|
|
|
|
### Groups
|
|
|
|
#### GET
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/groups/?sortBy=name&desc=true"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/groups/firstGroup
|
|
```
|
|
|
|
#### POST
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"creationDate": "2018-06-28T07:42:45.281Z",
|
|
"lastModified": "2018-06-28T07:42:45.281Z",
|
|
"description": "descr",
|
|
"name": "firstGroup",
|
|
"type": "admin",
|
|
"members": [ "scmadmin" ],
|
|
"properties": {
|
|
"pro1": "123",
|
|
"pro2": "abc"
|
|
},
|
|
"links": {
|
|
"empty": true
|
|
}
|
|
}' \
|
|
--header "Content-Type: application/vnd.scmm-group+json" http://localhost:8081/scm/api/v2/groups/
|
|
```
|
|
|
|
#### PUT
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"creationDate": "2018-06-28T07:42:45.281Z",
|
|
"lastModified": "2018-06-28T07:42:45.281Z",
|
|
"description": "descr",
|
|
"name": "firstGroup",
|
|
"type": "admin",
|
|
"members": [ "scmadmin" ],
|
|
"properties": {
|
|
"pro1": "123",
|
|
"pro2": "abc"
|
|
},
|
|
"links": {
|
|
"empty": true
|
|
}
|
|
}' \
|
|
--header "Content-Type: application/vnd.scmm-group+json" http://localhost:8081/scm/api/v2/groups/firstGroup
|
|
```
|
|
|
|
#### DELETE
|
|
|
|
```bash
|
|
curl -X DELETE -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/groups/firstGroup
|
|
```
|
|
|
|
### Repositories
|
|
|
|
#### GET
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/?sortBy=name&pageSize=1&desc=true"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/42/arepo"
|
|
```
|
|
|
|
#### POST
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"contact": "a@con.tact",
|
|
"creationDate": "2018-07-11T08:54:44.569Z",
|
|
"description": "Desc",
|
|
"name": "arepo",
|
|
"type": "git"
|
|
}' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories
|
|
```
|
|
|
|
#### PUT
|
|
|
|
- Change unmodifiable fields
|
|
- type? -> Leads to 500 right now
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"contact": "anoter@con.tact",
|
|
"creationDate": "2017-04-11T08:54:45.569Z",
|
|
"description": "NEW",
|
|
"namespace": "42",
|
|
"name": "arepo",
|
|
"type": "git",
|
|
"archived": "true"
|
|
}' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories/42/arepo
|
|
```
|
|
|
|
#### DELETE
|
|
|
|
```bash
|
|
curl -X DELETE -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/42/anSVNRepo"
|
|
```
|
|
|
|
### Repository Permissions
|
|
|
|
In this test we do not only test the REST endpoints themselves, but also the effect of the different permissions.
|
|
|
|
#### Prerequisites
|
|
|
|
For these tests we assume that you have created
|
|
|
|
- a git repository `scmadmin/git`, and
|
|
- a user named `user`.
|
|
|
|
If your entities have other ids, change them according to your data.
|
|
|
|
#### GET
|
|
|
|
This request should return an empty list of permissions:
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/"
|
|
```
|
|
|
|
#### POST / READ permission
|
|
|
|
```bash
|
|
curl -X POST -vu scmadmin:scmadmin --data '{
|
|
"name": "user", "type":"READ"
|
|
}' --header "Content-Type: application/vnd.scmm-permission+json"
|
|
"http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/"
|
|
```
|
|
|
|
After this, you should be able to `GET` the repository with the user `user`:
|
|
|
|
```bash
|
|
curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/"
|
|
```
|
|
|
|
Trying to change the repository using `PUT` with the user `user` should result in `403`:
|
|
|
|
```bash
|
|
curl -vu user:user -X PUT --data '{
|
|
"contact": "zaphod.beeblebrox@hitchhiker.com",
|
|
"namespace":"scmadmin",
|
|
"name": "git",
|
|
"archived": false,
|
|
"type": "git"
|
|
}
|
|
' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories/scmadmin/git
|
|
```
|
|
|
|
Reading the permissions of the repository with the user `user` should result in `403`:
|
|
|
|
```bash
|
|
curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/"
|
|
```
|
|
|
|
The user should be able to `clone` the repository:
|
|
|
|
```bash
|
|
git clone http://owner@localhost:8081/scm/git/scmadmin/git
|
|
```
|
|
|
|
The user should *not* be able to `push` to the repository:
|
|
|
|
```bash
|
|
cd git
|
|
touch a
|
|
git add a
|
|
git commit -m a
|
|
git push
|
|
```
|
|
|
|
#### PUT / WRITE permission
|
|
|
|
It should be possible to change the permission for a specific user:
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"name": "user",
|
|
"type":"WRITE"
|
|
}' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user"
|
|
```
|
|
|
|
After this the user `user` should now be able to `push` the repository created and modified beforehand.
|
|
|
|
```bash
|
|
cd git
|
|
git push
|
|
```
|
|
|
|
#### OWNER permission
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"name": "user",
|
|
"type":"OWNER"
|
|
}' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user"
|
|
```
|
|
|
|
After this, the user should be able to `GET` the permissions:
|
|
|
|
```bash
|
|
curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/"
|
|
```
|
|
|
|
Additionally, the user should be able to change permissions:
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"name": "user",
|
|
"type":"OWNER"
|
|
}' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user"
|
|
```
|
|
|
|
#### DELETE
|
|
|
|
Finally, a user with the role `OWNER` should be able to delete permissions:
|
|
|
|
```bash
|
|
curl -X DELETE -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user"
|
|
```
|
|
|
|
### Branches
|
|
|
|
* In advance: POST repo.
|
|
* Clone Repo, add Branches
|
|
|
|
#### GET
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/branches"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/branches/master"
|
|
```
|
|
|
|
### Configuration
|
|
|
|
#### GET
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config"
|
|
```
|
|
|
|
#### PUT
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"proxyPassword": "pw",
|
|
"proxyPort": 8082,
|
|
"proxyServer": "proxy.mydomain.com",
|
|
"proxyUser": "trillian",
|
|
"enableProxy": false,
|
|
"realmDescription": "SONIA :: SCM Manager",
|
|
"enableRepositoryArchive": true,
|
|
"disableGroupingGrid": true,
|
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
|
"anonymousAccessEnabled": false,
|
|
"adminGroups": [ "admin", "plebs" ],
|
|
"adminUsers": [ "trillian", "arthur" ],
|
|
"baseUrl": "http://localhost:8081/scm",
|
|
"forceBaseUrl": true,
|
|
"loginAttemptLimit": 1,
|
|
"proxyExcludes": [ "ex", "clude" ],
|
|
"skipFailedAuthenticators": true,
|
|
"pluginUrl": "url",
|
|
"loginAttemptLimitTimeout": 0,
|
|
"enabledXsrfProtection": false
|
|
}' --header "Content-Type: application/vnd.scmm-config+json" http://localhost:8081/scm/api/v2/config
|
|
```
|
|
|
|
### Git Plugin Configuration
|
|
|
|
#### GET
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/git"
|
|
```
|
|
|
|
#### PUT
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"gcExpression": "0 0 14-6 ? * FRI-MON",
|
|
"repositoryDirectory": "new",
|
|
"disabled": true
|
|
}' --header "Content-Type: application/vnd.scmm-gitConfig+json" http://localhost:8081/scm/api/v2/config/git
|
|
```
|
|
|
|
### Hg Plugin Configuration
|
|
|
|
#### GET
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg"
|
|
```
|
|
|
|
#### PUT
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"repositoryDirectory": "new",
|
|
"disabled": true,
|
|
"encoding": "UTF-16",
|
|
"hgBinary": "/hg",
|
|
"pythonBinary": "python3",
|
|
"pythonPath": "gf",
|
|
"useOptimizedBytecode": true,
|
|
"showRevisionInId": true
|
|
}' --header "Content-Type: application/vnd.scmm-hgConfig+json" http://localhost:8081/scm/api/v2/config/hg
|
|
```
|
|
|
|
#### Auto Config
|
|
|
|
##### Default
|
|
|
|
```bash
|
|
curl -v -X PUT -u scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/auto-configuration"
|
|
```
|
|
|
|
##### Specific config
|
|
|
|
```bash
|
|
curl -v -X PUT -u scmadmin:scmadmin --data '{
|
|
"repositoryDirectory": "new",
|
|
"disabled": true,
|
|
"encoding": "UTF-16",
|
|
"hgBinary": "/hg",
|
|
"pythonBinary": "python3",
|
|
"pythonPath": "gf",
|
|
"useOptimizedBytecode": true,
|
|
"showRevisionInId": true
|
|
}' --header "Content-Type: application/vnd.scmm-hgConfig+json" "http://localhost:8081/scm/api/v2/config/hg/auto-configuration"
|
|
```
|
|
|
|
#### Installations
|
|
|
|
##### Hg
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/installations/hg"
|
|
```
|
|
|
|
##### Python
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/installations/python"
|
|
```
|
|
|
|
#### Packages
|
|
|
|
##### GET
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/packages"
|
|
```
|
|
|
|
##### PUT
|
|
|
|
See [here](https://download.scm-manager.org/pkg/mercurial/packages.xml) for available packages. Will only work on Windows!
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/packages/4338c4_x64"
|
|
```
|
|
|
|
### Svn Plugin Configuration
|
|
|
|
#### GET
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/svn"
|
|
```
|
|
|
|
#### PUT
|
|
|
|
```bash
|
|
curl -X PUT -vu scmadmin:scmadmin --data '{
|
|
"repositoryDirectory": "new",
|
|
"disabled": true,
|
|
"enabledGZip": true,
|
|
"compatibility": "PRE15"
|
|
}' --header "Content-Type: application/vnd.scmm-svnConfig+json" http://localhost:8081/scm/api/v2/config/svn
|
|
```
|
|
|
|
### Repository Types
|
|
|
|
#### GET
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repository-types"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repository-types/hg"
|
|
```
|
|
|
|
### Tags
|
|
|
|
#### GET
|
|
|
|
Pre-conditions: the git repository "HeartOfGold-git" exists and contains tags example v1.0 and v1.1
|
|
|
|
##### Collections
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/HeartOfGold-git/tags/"
|
|
```
|
|
|
|
##### Individual
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/HeartOfGold-git/tags/v1.1"
|
|
```
|
|
|
|
### Content
|
|
|
|
#### git
|
|
|
|
##### Prepare
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"contact": "a@con.tact",
|
|
"creationDate": "2018-07-11T08:54:44.569Z",
|
|
"description": "Desc",
|
|
"name": "arepo",
|
|
"type": "git"
|
|
}' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories
|
|
|
|
cd /tmp
|
|
git clone http://scmadmin:scmadmin@localhost:8081/scm/git/scmadmin/arepo
|
|
cd arepo
|
|
echo "aaaa" > a
|
|
echo "bbb" > b.txt
|
|
wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java
|
|
git add .
|
|
git commit -m 'Msg'
|
|
git push
|
|
```
|
|
|
|
##### Query and assert
|
|
|
|
```bash
|
|
# Assert Content type text plain
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/b.txt" 2>&1 | grep Content-Type
|
|
# Assert file content "bbb"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/b.txt"
|
|
|
|
# Assert Content type octet stream
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/a" 2>&1 | grep Content-Type
|
|
# Assert file content "aaa"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/a"
|
|
|
|
# Assert content type text/x-java-source & Language Header JAVA
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language'
|
|
# Assert java file content
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/RestActionResult.java"
|
|
```
|
|
|
|
#### hg
|
|
|
|
##### Prepare
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"contact": "a@con.tact",
|
|
"creationDate": "2018-07-11T08:54:44.569Z",
|
|
"description": "Desc",
|
|
"name": "hgrepo",
|
|
"type": "hg"
|
|
}' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories
|
|
|
|
hg clone http://scmadmin:scmadmin@localhost:8081/scm/hg/scmadmin/hgrepo
|
|
cd hgrepo
|
|
echo "aaaa" > a
|
|
echo "bbb" > b.txt
|
|
wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java
|
|
hg add
|
|
hg commit -m 'msg'
|
|
hg push
|
|
```
|
|
|
|
##### Query and assert
|
|
|
|
```bash
|
|
# Assert Content type text plain
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/b.txt" 2>&1 | grep Content-Type
|
|
# Assert file content "bbb"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/b.txt"
|
|
|
|
# Assert Content type octet stream
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/a" 2>&1 | grep Content-Type
|
|
# Assert file content "aaa"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/a"
|
|
|
|
# Assert content type text/x-java-source & Language Header JAVA
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language'
|
|
# Assert java file content
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/RestActionResult.java"
|
|
```
|
|
|
|
#### svn
|
|
|
|
##### Prepare
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"contact": "a@con.tact",
|
|
"creationDate": "2018-07-11T08:54:44.569Z",
|
|
"description": "Desc",
|
|
"name": "svnrepo",
|
|
"type": "svn"
|
|
}' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories
|
|
|
|
svn co --non-interactive --no-auth-cache --username scmadmin --password scmadmin http://localhost:8081/scm/svn/scmadmin/svnrepo
|
|
cd svnrepo
|
|
echo "aaaa" > a
|
|
echo "bbb" > b.txt
|
|
wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java
|
|
svn add ./*
|
|
svn commit --non-interactive --no-auth-cache --username scmadmin --password scmadmin -m 'msg'
|
|
```
|
|
|
|
##### Query and assert
|
|
|
|
```bash
|
|
REVISION=$(svn --non-interactive --no-auth-cache --username scmadmin --password scmadmin info -r 'HEAD' --show-item revision | xargs echo -n)
|
|
# Assert Content type text plain
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/b.txt" 2>&1 | grep Content-Type
|
|
# Assert file content "bbb"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/b.txt"
|
|
|
|
# Assert Content type octet stream
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/a" 2>&1 | grep Content-Type
|
|
# Assert file content "aaa"
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/a"
|
|
|
|
# Assert content type text/x-java-source & Language Header JAVA
|
|
curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language'
|
|
# Assert java file content
|
|
curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/RestActionResult.java"
|
|
```
|
|
|
|
### Access Token
|
|
|
|
#### Admin
|
|
|
|
##### Output all links of index resource
|
|
|
|
```bash
|
|
TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{
|
|
"cookie": false,
|
|
"grant_type": "password",
|
|
"username": "scmadmin",
|
|
"password": "scmadmin"
|
|
}')
|
|
curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq
|
|
```
|
|
|
|
##### Output only "config" and default logged in links
|
|
|
|
default logged in links = self, uiPlugins, me, logout
|
|
|
|
```bash
|
|
TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{
|
|
"cookie": false,
|
|
"grant_type": "password",
|
|
"username": "scmadmin",
|
|
"password": "scmadmin",
|
|
"scope": [
|
|
"configuration:*"
|
|
]
|
|
}')
|
|
curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq
|
|
```
|
|
|
|
#### non-Admin
|
|
|
|
Create non-admin user
|
|
|
|
```bash
|
|
curl -vu scmadmin:scmadmin --data '{
|
|
"active": true,
|
|
"admin": false,
|
|
"displayName": "xyz",
|
|
"mail": "x@abcde.cd",
|
|
"name": "xyz",
|
|
"password": "pwd123",
|
|
"type": "xml"
|
|
}' \
|
|
--header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/
|
|
```
|
|
|
|
##### Standard permissions of a logged in user without additional permissions
|
|
|
|
Standard links of a logged in user = self, uiPlugins, me, logout, autocomplete, repositories
|
|
|
|
```bash
|
|
TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{
|
|
"cookie": false,
|
|
"grant_type": "password",
|
|
"username": "xyz",
|
|
"password": "pwd123"
|
|
}')
|
|
curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq
|
|
```
|
|
|
|
##### Scope requests permission the user doesn't have
|
|
|
|
This should not retrun `configuration` links, even though this scope was requested, because the user does not have the configuration permission. Otherwise this would be a major security flaw!
|
|
Compare to admin tests above.
|
|
|
|
```bash
|
|
TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{
|
|
"cookie": false,
|
|
"grant_type": "password",
|
|
"username": "xyz",
|
|
"password": "pwd123",
|
|
"scope": [
|
|
"configuration:*"
|
|
]
|
|
}')
|
|
curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq
|
|
```
|