Skip to content

abogatyrev/united-traders

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание United Traders

Веб приложение для хранения простых логов в виде REST API сервиса. С авторизацией Basic Auth (digest)

Используемые фреймворки и технологии

  • Java 8

  • Spring (spring-boot, spring-data, spring-data-rest, spring-security)

  • hsqldb БД

  • Maven как сборщик проекта

Сборка, запуск/останов проекта

В корневом каталоге проекта выполнить команду:

mvn package && java -jar target/united-traders-1.0.0-SNAPSHOT.jar

Проверка функциональности

  • Запрос на получение списка LogItem без авторизации

curl -X GET -H "Cache-Control: no-cache" "http://localhost:8080/"

результат

{
  "message": "Access denied"
}
  • Запрос на добавление новой записи LogItem

curl -X POST -H "Content-Type: application/json" -H "Authorization: Digest username="admin", realm="realm", nonce="MTQ2MDQ4MjE3NDU0MzphODNmOGQ1MGVmOGY2YjY2OTQzMDdhOTQ4OTYxZGExYQ==", uri="/", qop=auth, nc=, cnonce="", response="82130f42b5134325907033ffabc5bfda", opaque=""" -H "Cache-Control: no-cache" -d '{
	"dt": "1997-07-16T19:20:30+01:00",
	"level": "INFO",
	"message": "this is info message"
}' "http://localhost:8080/"

результат (при условии что записей не было)

{
  "id": 1
}
  • Запрос на получение списка LogItem с авторизацией

curl -X GET -H "Authorization: Digest username="user", realm="realm", nonce="MTQ2MDQ4MjE3NDU0MzphODNmOGQ1MGVmOGY2YjY2OTQzMDdhOTQ4OTYxZGExYQ==", uri="/", qop=auth, nc=, cnonce="", response="452816d390ac7cdbc884019789d1167b", opaque=""" -H "Cache-Control: no-cache" "http://localhost:8080/"

результат

{
  "content": [
    {
      "dt": "1997-07-16T18:20:30Z",
      "level": "INFO",
      "message": "this is info message"
    },
    {
      "dt": "1997-07-16T18:20:30Z",
      "level": "INFO",
      "message": "this is info message"
    }
  ],
  "totalElements": 2,
  "totalPages": 1,
  "last": true,
  "size": 20,
  "number": 0,
  "sort": [
    {
      "direction": "ASC",
      "property": "dt",
      "ignoreCase": false,
      "nullHandling": "NATIVE",
      "ascending": true
    }
  ],
  "numberOfElements": 2,
  "first": true
}
  • Запрос на добавление записи LogItem с не достаточными правами доступа

curl -X POST -H "Content-Type: application/json" -H "Authorization: Digest username="other", realm="realm", nonce="MTQ2MDQ4MjE3NDU0MzphODNmOGQ1MGVmOGY2YjY2OTQzMDdhOTQ4OTYxZGExYQ==", uri="/", qop=auth, nc=, cnonce="", response="f6bfbb176131578c07c0231b9394f841", opaque=""" -H "Cache-Control: no-cache" -d '{
	"dt": "1997-07-16T19:20:30+01:00",
	"level": "DEBUG",
	"message": "this is debug message"
}' "http://localhost:8080/"

результат

{
  "message": "User 'other' does not have access"
}
  • Запрос на добавление записи LogItem с не правильным форматом поля 'level'

curl -X POST -H "Content-Type: application/json" -H "Authorization: Digest username="admin", realm="realm", nonce="MTQ2MDQ4MjE3NDU0MzphODNmOGQ1MGVmOGY2YjY2OTQzMDdhOTQ4OTYxZGExYQ==", uri="/", qop=auth, nc=, cnonce="", response="82130f42b5134325907033ffabc5bfda", opaque=""" -H "Cache-Control: no-cache" -d '{
	"dt": "1997-07-16T19:20:30+01:00",
	"level": "WRONG_DEBUG",
	"message": "this is wrong message"
}' "http://localhost:8080/"

результат

{
  "errors": [
    {
      "field": "level",
      "message": "Can not construct instance of ru.abogatyrev.ut.model.LogLevel from String value 'WRONG_DEBUG': value not one of declared Enum instance names: [ERROR, DEBUG, FATAL, INFO, WARN]\n at [Source: java.io.PushbackInputStream@596ab9c8; line: 2, column: 35] (through reference chain: ru.abogatyrev.ut.model.LogItem[\"level\"])"
    }
  ]
}
  • Запрос на получение списка LogItem 'по странично'

curl -X GET -H "Authorization: Digest username="other", realm="realm", nonce="MTQ2MDQ4MjE3NDU0MzphODNmOGQ1MGVmOGY2YjY2OTQzMDdhOTQ4OTYxZGExYQ==", uri="/?page=1&size=3", qop=auth, nc=, cnonce="", response="7115ecf119964cf6a22a534273fc20fb", opaque=""" -H "Cache-Control: no-cache" "http://localhost:8080/?page=1&size=3"

результат (при условии что в списке только одна страница)

{
  "content": [],
  "totalElements": 2,
  "totalPages": 1,
  "last": true,
  "size": 3,
  "number": 1,
  "sort": [
    {
      "direction": "ASC",
      "property": "dt",
      "ignoreCase": false,
      "nullHandling": "NATIVE",
      "ascending": true
    }
  ],
  "numberOfElements": 0,
  "first": false
}

Коллекция запросов для Postman

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages