401 w testach a wchodzi bez logowania

0

Uzywam keycloak'a jako server autoryzujacy, ale na czas testow go wylonczylem

keycloak.enabled = false

Wewnatrz w konfiugu probowalem niemal wszystkiego zeby mi weszlo do tego URL'a jako uzytkownik niezalogowany

 public class KeyCloakConfig extends KeycloakWebSecurityConfigurerAdapter {

   @Override
        protected void configure(HttpSecurity http) throws Exception {
        
            http.headers().frameOptions().disable();
            http
                    .anonymous().and()  .csrf().disable()    
                    .authorizeRequests()
                    .antMatchers("/ingredients").permitAll();        

        }

}

w tescie mam 401 nawet jak zaloncze @WithAnonymousUser

@WebMvcTest(value = IngredientController.class)
@TestPropertySource("classpath:application-development.properties")
class IngredientControllerTest {

    @MockBean
    IngredientService ingredientService;

    @Autowired
    MockMvc mockMvc;


    @AfterEach
    void tearDown() {
        reset(ingredientService);
    }

    @Test
 //   @WithAnonymousUser
    void getAllIngredients() throws Exception {
        given(ingredientService.findAll()).willReturn(Arrays.asList(new Ingredient(),new Ingredient()));


        mockMvc.perform(get("/ingredients"))
                .andExpect(status().isOk());
             //   .andExpect(content().contentType(MediaType.valueOf("text/html;charset=UTF-8")));


    then(ingredientService).should().findAll();
   assertThat(ingredientService.findAll()).hasSize(2);

    }



}

co zabawne jak uzyje adnotacji @WithMockUser to wszystko jest ok

1

A to nie jest tak, że masz zautokonfigurowane basic security i potrzebujesz podać user+password? Wydaje mi się, że to właśnie robi ten @WithMockUser. Sprawdź w logach, co Cię odbija.

0
Charles_Ray napisał(a):

A to nie jest tak, że masz zautokonfigurowane basic security i potrzebujesz podać user+password? Wydaje mi się, że to właśnie robi ten @WithMockUser. Sprawdź w logach, co Cię odbija.

To jest to, bo widzę że mi wypisuje Using generated security password: 52cce531-b308-4d90-b76f-8984a88879fd. Po prostu olewa mi tą klasę konfiguracyjną. No ale jakbym chciał użyć innej klasy konfigurującej spring security. Z tym samym configiem to jak to mogę dodać do tego wycinka kontekstu któy jest ładowany dzięki @WebMvcTest? Żeby było jasne @SpringJUnitConfig(classes = TestSecurityConfig.class) nie działa, bo dostaje w odpowiedzi 404

tak wygląda początek tej klasy, jest ona w pakiecie z tym testem

@Configuration
@EnableWebSecurity
public class TestSecurityConfig extends WebSecurityConfigurerAdapter {
0

Nie rozumiem pytania :) co chcesz osiągnąć?

2

Moja rada: nie używaj MockMVC tylko testuj to jak człowiek, startujac aplikacje i wysyłając do niej prawdziwe requesty http. Bo za chwilę znów będzie płacz że testy zielone, ale w sumie aplikacja nie działa.

0
Shalom napisał(a):

Moja rada: nie używaj MockMVC tylko testuj to jak człowiek, startujac aplikacje i wysyłając do niej prawdziwe requesty http. Bo za chwilę znów będzie płacz że testy zielone, ale w sumie aplikacja nie działa.

Cały kontekst aplikacji uruchamiać na potrzeby testów warstwy webowej? Toć to by wszystko bardzo wolno działało. Tzn. z tego co wyczytałem to nie powinno się używać całego kontekstu do testów jednostkowych. Tzn. to co mówisz rozwiązałoby wszystkie problemy, ale nie wiem czy nie jest to trochę jak wylanie dziecka z kąpielom...

7

To standardowy problem w Springu. Albo masz testy szybkie, albo wiarygodne.

1
masterkwi napisał(a):
Shalom napisał(a):

Moja rada: nie używaj MockMVC tylko testuj to jak człowiek, startujac aplikacje i wysyłając do niej prawdziwe requesty http. Bo za chwilę znów będzie płacz że testy zielone, ale w sumie aplikacja nie działa.

Cały kontekst aplikacji uruchamiać na potrzeby testów warstwy webowej? Toć to by wszystko bardzo wolno działało. Tzn. z tego co wyczytałem to nie powinno się używać całego kontekstu do testów jednostkowych. Tzn. to co mówisz rozwiązałoby wszystkie problemy, ale nie wiem czy nie jest to trochę jak wylanie dziecka z kąpielom...

  1. http to już nie do końca testy jednostkowe
  2. możesz stawiać jeden kontekst springowy i go reużywać w kolejnych testach
0
jarekr000000 napisał(a):

To standardowy problem w Springu. Albo masz testy szybkie, albo wiarygodne.

Dokładnie jak w mapetach: - Sąd niesprawiedliwy lecz szybki!

1

Cały kontekst aplikacji uruchamiać na potrzeby testów warstwy webowej? Toć to by wszystko bardzo wolno działało. Tzn. z tego co wyczytałem to nie powinno się używać całego kontekstu do testów jednostkowych. Tzn. to co mówisz rozwiązałoby wszystkie problemy, ale nie wiem czy nie jest to trochę jak wylanie dziecka z kąpielom...

Co to są "testy warstwy webowej"? Ja mówie o testach integracyjnych na poziomie serwisu. Tzn odpalasz aplikacje, stukasz w dany entry-point (niech to będzie endpoint HTTP) i patrzysz czy wyniki są poprawne. Nie widze za bardzo sensu innego testowania tejże warstwy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1