如何在Jenkins上使用wiremock解决问题? java.net.BindException:权限被拒绝

问题描述 投票:0回答:1

我在 Jenkins 上遇到了wiremock 测试失败的问题。当我尝试在本地运行它时,它运行顺利,但是当我尝试在 Jenkins 上运行时,出现了此异常:

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] ============================

[2023-10-09T12:20:41.562Z] CONDITIONS EVALUATION REPORT

[2023-10-09T12:20:41.562Z] ============================

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] Positive matches:

[2023-10-09T12:20:41.562Z] -----------------

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z]     None

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] Negative matches:

[2023-10-09T12:20:41.562Z] -----------------

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z]     None

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] Exclusions:

[2023-10-09T12:20:41.562Z] -----------

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z]     None

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] Unconditional classes:

[2023-10-09T12:20:41.562Z] ----------------------

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z]     None

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.562Z] 

[2023-10-09T12:20:41.670Z] [ThreadedStreamConsumer] ERROR org.apache.maven.plugin.surefire.SurefirePlugin - Tests run: 7, Failures: 0, Errors: 7, Skipped: 0, Time elapsed: 48.407 s <<< FAILURE! - in com.dhl.subscriptions.boot.controller.NotificationsControllerITest

[2023-10-09T12:20:41.671Z] [ThreadedStreamConsumer] ERROR org.apache.maven.plugin.surefire.SurefirePlugin - testUpdateNotificationRuleStatus  Time elapsed: 0 s  <<< ERROR!

[2023-10-09T12:20:41.761Z] java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1845761c testClass = com.dhl.subscriptions.boot.controller.NotificationsControllerITest, locations = [], classes = [com.dhl.subscriptions.boot.SubscriptionsApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@733f04ae key = [org.springframework.cloud.contract.wiremock.WireMockConfiguration, org.springframework.cloud.contract.wiremock.WireMockRestTemplateConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@497570fb, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@51e37590, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@43255a5b, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1c6e0a08, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@433e536f, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@81319d4a, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5a9800f8, org.springframework.boot.test.context.SpringBootTestAnnotation@fecd68b1], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

[2023-10-09T12:20:41.761Z] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.contract.wiremock.WireMockConfiguration': Invocation of init method failed

[2023-10-09T12:20:41.761Z] Caused by: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:99

[2023-10-09T12:20:41.762Z] Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:99

[2023-10-09T12:20:41.762Z] Caused by: java.io.IOException: Failed to bind to /0.0.0.0:99

[2023-10-09T12:20:41.762Z] Caused by: java.net.BindException: Permission denied

[2023-10-09T12:20:41.762Z] 

[2023-10-09T12:20:41.762Z] [ThreadedStreamConsumer] ERROR org.apache.maven.plugin.surefire.SurefirePlugin - testGetNotificationRule  Time elapsed: 0 s  <<< ERROR!

JUnit 代码是:

package com.dhl.subscriptions.boot.controller;

import com.dhl.security.aaa.adapter.keycloak.Authentication;
import com.dhl.security.model.User;
import com.dhl.subscriptions.boot.SubscriptionsApplication;
import com.dhl.subscriptions.db.entity.NotificationConfigEntity;
import com.dhl.subscriptions.db.entity.NotificationRuleEntity;
import com.dhl.subscriptions.db.entity.TagsEntity;
import com.dhl.subscriptions.db.entity.UserProfileEntity;
import com.dhl.subscriptions.db.repository.NotificationConfigRepository;
import com.dhl.subscriptions.db.repository.NotificationRuleRepository;
import com.dhl.subscriptions.db.repository.UserProfileRepository;
import com.dhl.subscriptions.db.repository.UserTagRepository;
import com.dhl.subscriptions.model.*;
import com.dhl.subscriptions.rest.api.NotificationsController;
import com.dhl.subscriptions.service.NaritaOperations;
import com.dhl.subscriptions.service.NaritaService;
import com.dhl.subscriptions.service.NotificationService;
import com.dhl.subscriptions.service.config.ConfigService;
import com.dhl.subscriptions.service.mapper.NotificationRuleMapper;
import com.dhl.track.commons.translations.TranslationsService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.hibernate.Hibernate;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.transaction.annotation.Transactional;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import static com.dhl.subscriptions.boot.controller.DataUtil.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = SubscriptionsApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles({"test"})
@AutoConfigureWireMock(port = 99, stubs = {"classpath:/stubs"})
public class NotificationsControllerITest {
    public static final String USER_EMAIL = "[email protected]";

    @Autowired
    private UserProfileRepository userProfileRepository;
    @Autowired
    private NotificationConfigRepository notificationConfigRepository;
    @Autowired
    private NotificationRuleRepository notificationRuleRepository;
    @Autowired
    private NaritaService naritaService;
    @Autowired
    private NotificationRuleMapper notificationRuleMapper;
    @MockBean
    private Authentication authentication;
    @Autowired
    private UserTagRepository userTagRepository;
    @Autowired
    private NaritaOperations naritaOperations;
    @Autowired
    private NotificationService notificationService;
    @Autowired
    private TranslationsService translationsService;
    @Autowired
    private ConfigService configService;

    @Autowired
    private NotificationsController notificationsController;

    private MockMvc mockMvc;

    @Test
    public void testGetConfigMap() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        try {
            MvcResult result = this.mockMvc.perform(
                    get("/notifications/GENERAL")
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);
            assertEquals("{\"setting\":\"GENERAL\",\"text\":\"notification.type_general\",\"type\":{\"text\":\"notification.shipments_affected\",\"value\":{\"fe_type\":\"choice\",\"from_values\":[{\"text\":\"notification.shipments_affected_all\",\"value\":\"ALL\"},{\"text\":\"notification.shipments_affected_favorites\",\"value\":\"FAVORITES\"}]}},\"events\":{\"text\":\"notification.events\",\"values\":{\"fe_type\":\"multi_choice\",\"from_values\":[{\"event_type\":\"common\",\"text\":\"notification.triggering_events_status\",\"tooltip\":\"notification.triggering_events_status_tooltip\",\"value\":\"STATUS_CHANGED\",\"default\":true},{\"event_type\":\"common\",\"text\":\"notification.triggering_events_irregularities\",\"tooltip\":\"notification.triggering_events_irregularities_tooltip\",\"value\":\"OPERATIONAL_IRREGULARITIES\",\"default\":true},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_pickup\",\"value\":\"PICKUP\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_export_customs_clearance\",\"value\":\"EXPORT_CUSTOMS_CLEARANCE\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_origin\",\"value\":\"ORIGIN_PORT\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_destination\",\"value\":\"DESTINATION_PORT\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_import_customs_clearance\",\"value\":\"IMPORT_CUSTOMS_CLEARANCE\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_out_for_delivery\",\"tooltip\":\"notification.triggering_events_out_for_delivery_tooltip\",\"value\":\"OUT_FOR_DELIVERY\"},{\"event_type\":\"milestone\",\"text\":\"notification.triggering_events_customer_delivery\",\"value\":\"CUSTOMER_DELIVERY\"}]}},\"containerLevel\":{\"text\":\"notification.container.choice\",\"tooltip\":\"notification.container.tooltip\",\"fe_type\":\"boolean\",\"value\":false},\"digest\":{\"digest_header\":\"notification.digest_header\",\"digest\":{\"text\":\"notification.digest.all_in_one_mail\",\"fe_type\":\"boolean\",\"value\":false},\"digest_days\":{\"values\":{\"fe_type\":\"multi_choice\",\"from_values\":[{\"text\":\"notification.digest.mondays\",\"value\":\"Mondays\",\"default\":true},{\"text\":\"notification.digest.tuesdays\",\"value\":\"Tuesdays\",\"default\":false},{\"text\":\"notification.digest.wednesdays\",\"value\":\"Wednesdays\",\"default\":false},{\"text\":\"notification.digest.thursdays\",\"value\":\"Thursdays\",\"default\":false},{\"text\":\"notification.digest.fridays\",\"value\":\"Fridays\",\"default\":false},{\"text\":\"notification.digest.saturdays\",\"value\":\"Saturdays\",\"default\":false},{\"text\":\"notification.digest.sundays\",\"value\":\"Sundays\",\"default\":false}]}},\"digest_time\":{\"values\":{\"fe_type\":\"choice\",\"from_values\":[{\"text\":\"00:00\",\"value\":\"00:00\",\"default\":false},{\"text\":\"00:30\",\"value\":\"00:30\",\"default\":false},{\"text\":\"01:00\",\"value\":\"01:00\",\"default\":false},{\"text\":\"01:30\",\"value\":\"01:30\",\"default\":false},{\"text\":\"02:00\",\"value\":\"02:00\",\"default\":false},{\"text\":\"02:30\",\"value\":\"02:30\",\"default\":false},{\"text\":\"03:00\",\"value\":\"03:00\",\"default\":false},{\"text\":\"03:30\",\"value\":\"03:30\",\"default\":false},{\"text\":\"04:00\",\"value\":\"04:00\",\"default\":false},{\"text\":\"04:30\",\"value\":\"04:30\",\"default\":false},{\"text\":\"05:00\",\"value\":\"05:00\",\"default\":false},{\"text\":\"05:30\",\"value\":\"05:30\",\"default\":false},{\"text\":\"06:00\",\"value\":\"06:00\",\"default\":false},{\"text\":\"06:30\",\"value\":\"06:30\",\"default\":false},{\"text\":\"07:00\",\"value\":\"07:00\",\"default\":false},{\"text\":\"07:30\",\"value\":\"07:30\",\"default\":false},{\"text\":\"08:00\",\"value\":\"08:00\",\"default\":true},{\"text\":\"08:30\",\"value\":\"08:30\",\"default\":false},{\"text\":\"09:00\",\"value\":\"09:00\",\"default\":false},{\"text\":\"09:30\",\"value\":\"09:30\",\"default\":false},{\"text\":\"10:00\",\"value\":\"10:00\",\"default\":false},{\"text\":\"10:30\",\"value\":\"10:30\",\"default\":false},{\"text\":\"11:00\",\"value\":\"11:00\",\"default\":false},{\"text\":\"11:30\",\"value\":\"11:30\",\"default\":false},{\"text\":\"12:00\",\"value\":\"12:00\",\"default\":false},{\"text\":\"12:30\",\"value\":\"12:30\",\"default\":false},{\"text\":\"13:00\",\"value\":\"13:00\",\"default\":false},{\"text\":\"13:30\",\"value\":\"13:30\",\"default\":false},{\"text\":\"14:00\",\"value\":\"14:00\",\"default\":false},{\"text\":\"14:30\",\"value\":\"14:30\",\"default\":false},{\"text\":\"15:00\",\"value\":\"15:00\",\"default\":false},{\"text\":\"15:30\",\"value\":\"15:30\",\"default\":false},{\"text\":\"16:00\",\"value\":\"16:00\",\"default\":false},{\"text\":\"16:30\",\"value\":\"16:30\",\"default\":false},{\"text\":\"17:00\",\"value\":\"17:00\",\"default\":false},{\"text\":\"17:30\",\"value\":\"17:30\",\"default\":false},{\"text\":\"18:00\",\"value\":\"18:00\",\"default\":false},{\"text\":\"18:30\",\"value\":\"18:30\",\"default\":false},{\"text\":\"19:00\",\"value\":\"19:00\",\"default\":false},{\"text\":\"19:30\",\"value\":\"19:30\",\"default\":false},{\"text\":\"20:00\",\"value\":\"20:00\",\"default\":false},{\"text\":\"20:30\",\"value\":\"20:30\",\"default\":false},{\"text\":\"21:00\",\"value\":\"21:00\",\"default\":false},{\"text\":\"21:30\",\"value\":\"21:30\",\"default\":false},{\"text\":\"22:00\",\"value\":\"22:00\",\"default\":false},{\"text\":\"22:30\",\"value\":\"22:30\",\"default\":false},{\"text\":\"23:00\",\"value\":\"23:00\",\"default\":false},{\"text\":\"23:30\",\"value\":\"23:30\",\"default\":false}]}}}}", result.getResponse().getContentAsString());

        } catch (Exception ex) {
            fail();
        }

    }

    @Test
    public void testGetNotificationRule() {
        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(authentication.getUser()).thenReturn(user);


        Long id = initDatabase(false);

        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        try {
            MvcResult result = this.mockMvc.perform(
                    get("/notifications/rules/" + id)
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);

            NotificationRule notificationRule = new ObjectMapper().readValue(result.getResponse().getContentAsString(), NotificationRule.class);
            assertNotNull(notificationRule);
            assertEquals(SUBSCRIPTION_ID, notificationRule.getSubscriptionId());
            assertEquals(NotificationSetting.GENERAL, notificationRule.getSetting());
            assertEquals(NotificationType.FAVORITES, notificationRule.getType());

            assertNotNull(notificationRule.getTradeLanes());
            assertEquals(1, notificationRule.getTradeLanes().size());

            for (TradeLane tradeLane : notificationRule.getTradeLanes()) {
                assertNotNull(tradeLane.getOrigin());
                assertEquals(1, tradeLane.getOrigin().size());
                assertNotNull(tradeLane.getDestination());
                assertEquals(1, tradeLane.getDestination().size());
                assertNotNull(tradeLane.getTransportMode());
                assertEquals(1, tradeLane.getTransportMode().size());

                for (PathPoint origin : tradeLane.getOrigin()) {
                    assertEquals("point-name_destination", origin.getName());
                    assertEquals("code-name_destination", origin.getCode());
                }

                for (PathPoint destination : tradeLane.getDestination()) {
                    assertEquals("point-name", destination.getName());
                    assertEquals("code-name", destination.getCode());
                }

                for (TransportMode transportMode : tradeLane.getTransportMode())
                    assertEquals(TransportMode.AIR, transportMode);
            }

            assertTrue(notificationRule.isActive());
            assertTrue(notificationRule.isContainerLevel());

            for (Event event : notificationRule.getEvents()) {
                assertEquals(Event.CUSTOMER_DELIVERY, event);
            }

            assertFalse(notificationRule.isDigest());
            assertEquals("* * * * * * *", notificationRule.getCronSchedule());
            assertEquals("UTC", notificationRule.getTimezone());
        } catch (Exception ex) {
            fail();
        }

        clearDatabase();
    }

    @Test
    public void testGetAllRules() {
        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(user.getEmail()).thenReturn(USER_EMAIL);
        when(authentication.getUser()).thenReturn(user);

        UserProfileEntity userProfileEntity = getTestUserProfileEntity();
        userProfileRepository.saveAndFlush(userProfileEntity);

        TagsEntity tagsEntity = new TagsEntity();
        tagsEntity.setTag("Tag");
        tagsEntity.setUuid(CPUUID);
        tagsEntity.setUserProfileEntity(userProfileEntity);

        userTagRepository.saveAndFlush(tagsEntity);


        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        try {
            MvcResult result = this.mockMvc.perform(
                    get("/notifications/all-rules/" + CPUUID + "?cpCode=" + CPCODE)
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);
            assertNotNull(result.getResponse().getContentAsString());
            List allRules = new ObjectMapper().readValue(result.getResponse().getContentAsString(),List.class);
            assertNotNull(allRules);
            assertEquals(1, allRules.size());

            Map data  = (LinkedHashMap)allRules.get(0);
            assertNotNull(data.get("id"));
            assertEquals("12345", data.get("subscriptionId"));
            assertEquals(NotificationSetting.GENERAL.toString(), data.get("setting"));
            assertEquals(NotificationType.FAVORITES.toString(), data.get("type"));
            assertNull(data.get("tradeLanes"));

            assertFalse((Boolean) data.get("active"));
            assertFalse((Boolean) data.get("containerLevel"));
            assertFalse((Boolean) data.get("digest"));

            assertNotNull(data.get("events"));

            List<String> events = (List)data.get("events");

            for(String event : events) {
                assertEquals(Event.STATUS_CHANGED.toString(), event);
            }
            assertNull(data.get("cronSchedule"));
            assertNull(data.get("timezone"));


        } catch (Exception ex) {
            ex.printStackTrace();
            fail();
        }

        clearDatabase();


    }

    @Test
    @Transactional
    public void testCreateNotificationRule() {
        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(user.getEmail()).thenReturn(USER_EMAIL);
        when(authentication.getUser()).thenReturn(user);

        UserProfileEntity userProfileEntity = getTestUserProfileEntity();
        userProfileRepository.saveAndFlush(userProfileEntity);

        TagsEntity tagsEntity = new TagsEntity();
        tagsEntity.setTag("Tag");
        tagsEntity.setUuid(CPUUID);
        tagsEntity.setUserProfileEntity(userProfileEntity);

        userTagRepository.saveAndFlush(tagsEntity);


        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();
        ObjectMapper mapper = new ObjectMapper();

        NotificationRule notificationRule = getTestNotificationRule();
        try {
            MvcResult result = mockMvc.perform(post("/notifications/rules/" + CPUUID + "?cpCode=" + CPCODE).contentType(MediaType.APPLICATION_JSON)
                    .content(mapper.writeValueAsString(notificationRule))).andReturn();

            assertNotNull(result);
            assertNotNull(result.getResponse().getContentAsString());

            NotificationRule saved = mapper.readValue(result.getResponse().getContentAsString(), NotificationRule.class);
            assertNotNull(saved.getId());

            assertEquals("12345", saved.getSubscriptionId());
            assertEquals(NotificationSetting.GENERAL, saved.getSetting());
            assertEquals(NotificationType.FAVORITES, saved.getType());
            assertNull(saved.getTradeLanes());
            assertTrue(saved.isActive());
            assertTrue(saved.isContainerLevel());
            assertNotNull(saved.getEvents());
            assertEquals(1, saved.getEvents().size());

            for (Event event : saved.getEvents()) {
                assertEquals(Event.STATUS_CHANGED, event);
            }

            assertFalse(saved.isDigest());
            assertEquals("* * * * * *", saved.getCronSchedule());
            assertEquals("UTF", saved.getTimezone());

        } catch (Exception ex) {
            fail();
        }

        clearDatabase();

    }

    @Test
    public void testUpdateNotificationRule() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(user.getEmail()).thenReturn(USER_EMAIL);
        when(authentication.getUser()).thenReturn(user);

        Long id = initDatabase(false);

        NotificationRule notificationRule = getTestNotificationRule();
        notificationRule.setId(id);
        notificationRule.setTimezone("GMC");

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            MvcResult result = this.mockMvc.perform(
                    put("/notifications/rules/" + id)
                            .content(objectMapper.writeValueAsString(notificationRule))
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);

            Optional<NotificationRuleEntity> notificationRuleEntity = notificationRuleRepository.findById(id);

            if (!notificationRuleEntity.isPresent()) {
                throw new RuntimeException("Updated rule isnt in database");
            }

            NotificationRuleEntity notificationRuleEntity1 = notificationRuleEntity.get();
            assertEquals("GMC", notificationRuleEntity1.getTimezone());
        } catch (Exception ex) {
            ex.printStackTrace();
            fail();
        }

        clearDatabase();
    }


    @Test
    public void testUpdateNotificationRuleStatus() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(user.getEmail()).thenReturn(USER_EMAIL);
        when(authentication.getUser()).thenReturn(user);

        Long id = initDatabase(false);

        NotificationRuleStatusChange notificationRuleStatusChange = new NotificationRuleStatusChange();
        notificationRuleStatusChange.setActive(false);

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            MvcResult result = this.mockMvc.perform(
                    patch("/notifications/rules/" + id)
                            .content(objectMapper.writeValueAsString(notificationRuleStatusChange))
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);

            Optional<NotificationRuleEntity> notificationRuleEntity = notificationRuleRepository.findById(id);

            if (!notificationRuleEntity.isPresent()) {
                throw new RuntimeException("Updated rule isnt in database");
            }

            NotificationRuleEntity notificationRuleEntity1 = notificationRuleEntity.get();
            assertFalse(notificationRuleEntity1.getActive());
        } catch (Exception ex) {
            fail();
        }

        clearDatabase();
    }

    @Test
    public void testDeleteNotificationRule() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(notificationsController).build();

        User user = mock(User.class);
        when(user.getId()).thenReturn(USER_ID);
        when(user.getEmail()).thenReturn(USER_EMAIL);
        when(authentication.getUser()).thenReturn(user);

        Long id = initDatabase(true);



        try {
            MvcResult result = this.mockMvc.perform(
                    delete("/notifications/rules/" + id)
                            .contentType(MediaType.APPLICATION_JSON)

            ).andReturn();

            assertNotNull(result);

            Optional<NotificationRuleEntity> notificationRuleEntity = notificationRuleRepository.findById(id);

            if (!notificationRuleEntity.isEmpty()) {
                fail();
            }

        } catch (Exception ex) {
            fail();
        }

        clearDatabase();
    }

    private void clearDatabase() {
        userTagRepository.deleteAll();
        notificationConfigRepository.deleteAll();
        userProfileRepository.deleteAll();
        notificationRuleRepository.deleteAll();
    }

    private Long initDatabase(boolean isCustomSettings) {
        UserProfileEntity userProfileEntity = getTestUserProfileEntity();
        userProfileRepository.saveAndFlush(userProfileEntity);

        TagsEntity tagsEntity = new TagsEntity();
        tagsEntity.setTag("Tag");
        tagsEntity.setUuid(CPUUID);
        tagsEntity.setUserProfileEntity(userProfileEntity);

        userTagRepository.saveAndFlush(tagsEntity);

        NotificationConfigEntity notificationConfigEntity = getTestNotificationConfigEntity();
        notificationConfigEntity.setUserProfileEntity(userProfileEntity);
        notificationConfigRepository.saveAndFlush(notificationConfigEntity);

        NotificationRuleEntity notificationRuleEntity = getTestNotificationRuleEntity();
        notificationRuleEntity.setNotificationConfigEntity(notificationConfigEntity);

        if(isCustomSettings) {
            notificationRuleEntity.setSetting(NotificationSetting.CUSTOM);
        }

        notificationRuleRepository.saveAndFlush(notificationRuleEntity);

        return notificationRuleEntity.getId();
    }


}

我不知道这可能是个问题。我用另一个项目检查了一下,似乎配置是相同的。詹金斯服务器上的防火墙应该有问题吗?但也许不是,因为另一次测试运行顺利。谢谢你的帮助。

jenkins junit wiremock
1个回答
0
投票

您正在尝试在特权端口上运行,即带有数字的端口 < 1024.

默认情况下,操作系统会阻止这种情况,除非您以 root 身份运行。

将端口号设置为 1024 以上的值应该可以解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.