В моем микросервисе у меня есть загрузочный контроллер Spring, который также получает токен аутентификации из заголовка http-запроса и отправляет его на другой микросервис для проверки:
@Autowired
private AuthService authService;
@GetMapping(path = "/find", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
@Timed
@CrossOrigin
public ResponseEntity<?> find(
@RequestParam(name = "contactId", required = true) final Long contactId,
@RequestHeader(name = "secret-token", required = true) String token
) {
boolean checkTokenValidationFromAuthServer = authService.checkTokenValidationFromAuthServer(token);
if (!checkTokenValidationFromAuthServer) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("token is invalid");
}
return ResponseEntity.status(HttpStatus.OK).body("Your contact here!");
}
Служба аутентификации должна быть такой
@Service
@Component
public class AuthService {
public boolean checkTokenValidationFromAuthServer(String token){
//make rest call to auth microservice
//validate token, return false, or true
return false;
}
}
Базовый тест всегда будет неудачным, потому что я из теста не знаю секретного токена, хочу издеваться или не допустить проверки контроллера:
@RunWith(SpringRunner.class)
@SpringBootTest
public class PoolApplicationTests {
@Autowired
private PoolController controller;
@Test
public void controllerInitializedCorrectly() {
assertThat(controller).isNotNull();
}
@Test
public void testCall() {
ResponseEntity<?> find = controller.find(1L, "token");
assertThat(find.getStatusCode()).isEqualTo(200);
}
}
Я не знаю, какая стратегия для этого наилучшаявиды дел.