401 w testach a wchodzi bez logowania

401 w testach a wchodzi bez logowania
MA
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:105
0

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

Kopiuj
keycloak.enabled = false

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

Kopiuj
 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

Kopiuj
@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

edytowany 1x, ostatnio: masterkwi
MA
tak wyłączyłem, bo do testów jednostkowych nie będziesz uruchamiał całego serwera uwierzytelniającego, zresztą w dokumentacji keycloak radzili tak zrobić
_13th_Dragon
Ja mówię o "wyl-ON-czylem", może lepiej "wył-OFF-czyłem"?
MA
Masz rację popełniłem błąd ortograficzny, jednakże nie jestem w stanie już edytować tego posta.
_13th_Dragon
Nie wierze, ale zawsze możesz poprosić moderatora.
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 8 godzin
  • Postów:1881
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.


”Engineering is easy. People are hard.” Bill Coughran
MA
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:105
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

Kopiuj
@Configuration
@EnableWebSecurity
public class TestSecurityConfig extends WebSecurityConfigurerAdapter {
edytowany 3x, ostatnio: masterkwi
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 8 godzin
  • Postów:1881
0

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


”Engineering is easy. People are hard.” Bill Coughran
MA
problem rozwiązany dodałem do testowanego kontekstu config od spring security
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
MA
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:105
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...

edytowany 1x, ostatnio: masterkwi
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
7

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


jeden i pół terabajta powinno wystarczyć każdemu
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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

Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:17 dni
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!


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostały 1 komentarz
Shalom
Ale co ty chcesz testować w kontrolerze? Kontroler nie ma żadnej logiki do testowania. Zresztą taki test integracyjny który opisałem i tak ci to załatwia, gdyby jakimś cudem spring ci nie działał i nie wystawił endpointu ;) MockMVC jest dla ludzi którzy napisali gówniany projekt i aplikacja wstaje im 3h albo w ogóle nie są w stanie jej lokalnie odpalić ;]
KamilAdam
Projekt może być nawet dobry, ale jak wymyślą że ma działać w serwerze aplikacyjnym to kaplica
Charles_Ray
Testowanie samych kontrolerów ma mały sens, jednak może się przydać w wyjątkowych sytuacjach - np. parsowanie daty czy BigDecimali ;)
Shalom
@Charles_Ray: no tylko że taki mockmvc niekoniecznie ci to przetestuje bo wpinasz się jednak bezpośrednio do metody kontrolera, w tym cały problem! Niejako omijasz testowanie parsowania zapytań i np. security i testujesz w sumie nie wiadomo co, bo logikę możesz testować zwykłymi testami jednostkowymi, a sam kontroler nie powinien nic robić.
Charles_Ray
Zgadzam się co do zasady :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.