fix(build): restore emulator package

This commit is contained in:
simoleo89
2026-06-19 10:17:33 +02:00
parent caaff4f591
commit d451a3dc71
13 changed files with 108 additions and 130 deletions
@@ -167,6 +167,9 @@ public final class Emulator {
Emulator.config.register("rcon.execute_command.denied_permissions", "cmd_shutdown;cmd_give_rank");
Emulator.config.register("rcon.execute_command.allowed_permissions", "");
Emulator.config.register("rcon.max_payload_bytes", "65536");
Emulator.config.register("nitro.secure.api.max_payload_bytes", "65536");
Emulator.config.register("nitro.secure.config.max_file_bytes", "2097152");
Emulator.config.register("nitro.secure.gamedata.max_file_bytes", "16777216");
registerEarningsSettings();
String hotelTimezoneId = Emulator.getConfig().getValue("hotel.timezone", java.time.ZoneId.systemDefault().getId());
System.out.println(startupCard(hotelTimezoneId));
@@ -117,10 +117,8 @@ public class WiredConditionFurniHaveFurni extends InteractionWiredCondition {
for(int id : WiredFurniConditionInputGuard.sanitizeItemIds(data.itemIds, WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
HabboItem item = room.getHabboItem(id);
if (item != null) {
this.items.add(item);
}
if (item != null) {
this.items.add(item);
}
}
} else {
@@ -133,9 +131,8 @@ public class WiredConditionFurniHaveFurni extends InteractionWiredCondition {
for (int id : WiredFurniConditionInputGuard.parseLegacyItemIds(data[1], WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
if (item != null)
this.items.add(item);
} catch (NumberFormatException ignored) {
if (item != null) {
this.items.add(item);
}
}
}
@@ -103,10 +103,8 @@ public class WiredConditionFurniHaveHabbo extends InteractionWiredCondition {
for(int id : WiredFurniConditionInputGuard.sanitizeItemIds(data.itemIds, WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
HabboItem item = room.getHabboItem(id);
if (item != null) {
this.items.add(item);
}
if (item != null) {
this.items.add(item);
}
}
} else {
@@ -116,9 +114,8 @@ public class WiredConditionFurniHaveHabbo extends InteractionWiredCondition {
for (int id : WiredFurniConditionInputGuard.parseLegacyItemIds(data[1], WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
if (item != null)
this.items.add(item);
} catch (NumberFormatException ignored) {
if (item != null) {
this.items.add(item);
}
}
}
@@ -123,20 +123,16 @@ public class WiredConditionTriggerOnFurni extends InteractionWiredCondition {
for(int id : WiredFurniConditionInputGuard.sanitizeItemIds(data.itemIds, WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
HabboItem item = room.getHabboItem(id);
if (item != null) {
this.items.add(item);
}
if (item != null) {
this.items.add(item);
}
}
} else {
for (int id : WiredFurniConditionInputGuard.parseLegacyItemIds(wiredData, WiredManager.MAXIMUM_FURNI_SELECTION)) {
HabboItem item = room.getHabboItem(id);
if (item != null) {
this.items.add(item);
}
} catch (NumberFormatException ignored) {
if (item != null) {
this.items.add(item);
}
}
this.furniSource = this.items.isEmpty() ? WiredSourceUtil.SOURCE_TRIGGER : WiredSourceUtil.SOURCE_SELECTED;
@@ -71,7 +71,6 @@ public class WiredTriggerAtSetTime extends InteractionWiredTrigger implements Wi
@Override
public void loadWiredData(ResultSet set, Room room) throws SQLException {
String wiredData = set.getString("wired_data");
this.executeTime = parseExecuteTime(wiredData);
Integer storedExecuteTime = null;
try {
@@ -84,7 +83,6 @@ public class WiredTriggerAtSetTime extends InteractionWiredTrigger implements Wi
} catch (RuntimeException ignored) {
storedExecuteTime = null;
}
}
this.executeTime = WiredTimerInputGuard.normalizeStoredMillis(storedExecuteTime, MIN_DELAY, LEGACY_FALLBACK_DELAY);
@@ -148,15 +146,6 @@ public class WiredTriggerAtSetTime extends InteractionWiredTrigger implements Wi
return true;
}
private static int safeMultiply(int value, int factor) {
if (value <= 0) {
return DEFAULT_EXECUTE_TIME;
}
long multiplied = (long) value * factor;
return multiplied > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) multiplied;
}
// ========== WiredTickable Implementation ==========
@Override
@@ -71,7 +71,6 @@ public class WiredTriggerAtTimeLong extends InteractionWiredTrigger implements W
@Override
public void loadWiredData(ResultSet set, Room room) throws SQLException {
String wiredData = set.getString("wired_data");
this.executeTime = parseExecuteTime(wiredData);
Integer storedExecuteTime = null;
try {
@@ -84,7 +83,6 @@ public class WiredTriggerAtTimeLong extends InteractionWiredTrigger implements W
} catch (RuntimeException ignored) {
storedExecuteTime = null;
}
}
this.executeTime = WiredTimerInputGuard.normalizeStoredMillis(storedExecuteTime, MIN_DELAY, LEGACY_FALLBACK_DELAY);
@@ -148,15 +146,6 @@ public class WiredTriggerAtTimeLong extends InteractionWiredTrigger implements W
return true;
}
private static int safeMultiply(int value, int factor) {
if (value <= 0) {
return DEFAULT_EXECUTE_TIME;
}
long multiplied = (long) value * factor;
return multiplied > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) multiplied;
}
// ========== WiredTickable Implementation ==========
@Override
@@ -66,8 +66,6 @@ public class WiredTriggerRepeater extends InteractionWiredTrigger implements Wir
@Override
public void loadWiredData(ResultSet set, Room room) throws SQLException {
String wiredData = set.getString("wired_data");
this.repeatTime = parseRepeatTime(wiredData);
}
Integer storedRepeatTime = null;
try {
@@ -80,7 +78,6 @@ public class WiredTriggerRepeater extends InteractionWiredTrigger implements Wir
} catch (RuntimeException ignored) {
storedRepeatTime = null;
}
}
this.repeatTime = WiredTimerInputGuard.normalizeStoredMillis(storedRepeatTime, MIN_DELAY, LEGACY_FALLBACK_DELAY);
}
@@ -133,8 +130,7 @@ public class WiredTriggerRepeater extends InteractionWiredTrigger implements Wir
if (settings.getIntParams().length < 1) return false;
this.repeatTime = WiredTimerInputGuard.fromClientUnits(settings.getIntParams()[0], STEP_MS, MIN_DELAY);
long multiplied = (long) value * factor;
return multiplied > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) multiplied;
return true;
}
// ========== WiredTickable Implementation ==========
@@ -66,8 +66,6 @@ public class WiredTriggerRepeaterLong extends InteractionWiredTrigger implements
@Override
public void loadWiredData(ResultSet set, Room room) throws SQLException {
String wiredData = set.getString("wired_data");
this.repeatTime = parseRepeatTime(wiredData);
}
Integer storedRepeatTime = null;
try {
@@ -80,7 +78,6 @@ public class WiredTriggerRepeaterLong extends InteractionWiredTrigger implements
} catch (RuntimeException ignored) {
storedRepeatTime = null;
}
}
this.repeatTime = WiredTimerInputGuard.normalizeStoredMillis(storedRepeatTime, MIN_DELAY, LEGACY_FALLBACK_DELAY);
}
@@ -136,15 +133,6 @@ public class WiredTriggerRepeaterLong extends InteractionWiredTrigger implements
return true;
}
private static int safeMultiply(int value, int factor) {
if (value <= 0) {
return DEFAULT_DELAY;
}
long multiplied = (long) value * factor;
return multiplied > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) multiplied;
}
// ========== WiredTickable Implementation ==========
@Override
@@ -15,6 +15,15 @@ import java.util.Set;
public class RoomSettingsSaveEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RoomSettingsSaveEvent.class);
private static final int MAX_TAGS = 2;
private static final int MAX_ROOM_PASSWORD_LENGTH = 64;
private static final int MIN_USERS_MAX = 1;
private static final int MAX_USERS_MAX = 200;
private static final int MIN_WALL_OR_FLOOR_SIZE = -2;
private static final int MAX_WALL_OR_FLOOR_SIZE = 1;
private static final int MAX_OPTION_LEVEL = 2;
private static final int MIN_CHAT_DISTANCE = 1;
private static final int MAX_CHAT_DISTANCE = 99;
@Override
public void handle() throws Exception {
@@ -48,13 +57,13 @@ public class RoomSettingsSaveEvent extends MessageHandler {
}
int stateId = this.packet.readInt();
if (!RoomSettingsInputGuard.isValidRoomState(stateId)) {
if (stateId < 0 || stateId >= RoomState.values().length) {
return;
}
RoomState state = RoomSettingsInputGuard.roomState(stateId);
RoomState state = RoomState.values()[stateId];
String password = this.packet.readString();
if (!RoomSettingsInputGuard.isSafePassword(password)) {
if (password == null || password.length() > MAX_ROOM_PASSWORD_LENGTH) {
return;
}
if (state == RoomState.PASSWORD && password.isEmpty() && (room.getPassword() == null || room.getPassword().isEmpty())) {
@@ -63,7 +72,7 @@ public class RoomSettingsSaveEvent extends MessageHandler {
}
int usersMax = this.packet.readInt();
if (!RoomSettingsInputGuard.isValidUsersMax(usersMax)) {
if (!isInRange(usersMax, MIN_USERS_MAX, MAX_USERS_MAX)) {
return;
}
@@ -71,7 +80,7 @@ public class RoomSettingsSaveEvent extends MessageHandler {
StringBuilder tags = new StringBuilder();
Set<String> uniqueTags = new HashSet<>();
int count = this.packet.readInt();
if (!RoomSettingsInputGuard.isValidTagCount(count)) {
if (count < 0 || count > MAX_TAGS) {
return;
}
for (int i = 0; i < count; i++) {
@@ -143,17 +152,17 @@ public class RoomSettingsSaveEvent extends MessageHandler {
int chatDistance = this.packet.readInt();
int chatProtection = this.packet.readInt();
if (!RoomSettingsInputGuard.isValidTradeMode(tradeMode)
|| !RoomSettingsInputGuard.isValidWallOrFloorSize(wallSize)
|| !RoomSettingsInputGuard.isValidWallOrFloorSize(floorSize)
|| !RoomSettingsInputGuard.isValidModerationOption(muteOption)
|| !RoomSettingsInputGuard.isValidModerationOption(kickOption)
|| !RoomSettingsInputGuard.isValidModerationOption(banOption)
|| !RoomSettingsInputGuard.isValidChatMode(chatMode)
|| !RoomSettingsInputGuard.isValidChatWeight(chatWeight)
|| !RoomSettingsInputGuard.isValidChatSpeed(chatSpeed)
|| !RoomSettingsInputGuard.isValidChatDistance(chatDistance)
|| !RoomSettingsInputGuard.isValidChatProtection(chatProtection)) {
if (!isInRange(tradeMode, 0, MAX_OPTION_LEVEL)
|| !isInRange(wallSize, MIN_WALL_OR_FLOOR_SIZE, MAX_WALL_OR_FLOOR_SIZE)
|| !isInRange(floorSize, MIN_WALL_OR_FLOOR_SIZE, MAX_WALL_OR_FLOOR_SIZE)
|| !isInRange(muteOption, 0, MAX_OPTION_LEVEL)
|| !isInRange(kickOption, 0, MAX_OPTION_LEVEL)
|| !isInRange(banOption, 0, MAX_OPTION_LEVEL)
|| !isInRange(chatMode, 0, MAX_OPTION_LEVEL)
|| !isInRange(chatWeight, 0, MAX_OPTION_LEVEL)
|| !isInRange(chatSpeed, 0, MAX_OPTION_LEVEL)
|| !isInRange(chatDistance, MIN_CHAT_DISTANCE, MAX_CHAT_DISTANCE)
|| !isInRange(chatProtection, 0, MAX_OPTION_LEVEL)) {
return;
}
@@ -189,4 +198,8 @@ public class RoomSettingsSaveEvent extends MessageHandler {
}
}
private static boolean isInRange(int value, int min, int max) {
return value >= min && value <= max;
}
}
@@ -10,11 +10,13 @@ class WiredConditionAvatarPayloadGuardTest {
void effectIdsSourcesAndQuantifiersAreBounded() {
WiredConditionHabboHasEffect condition = new WiredConditionHabboHasEffect(1, 1, null, "", 0, 0);
assertEquals(0, condition.normalizeEffectId(-1));
assertEquals(23, condition.normalizeEffectId(23));
assertEquals(WiredConditionHabboHasEffect.MAX_EFFECT_ID, condition.normalizeEffectId(Integer.MAX_VALUE));
assertEquals(WiredSourceUtil.SOURCE_CLICKED_USER, condition.normalizeUserSource(WiredSourceUtil.SOURCE_CLICKED_USER));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, condition.normalizeUserSource(777));
assertEquals(0, WiredUserConditionInputGuard.normalizeEffectId(-1));
assertEquals(23, WiredUserConditionInputGuard.normalizeEffectId(23));
assertEquals(WiredConditionHabboHasEffect.MAX_EFFECT_ID,
WiredUserConditionInputGuard.normalizeEffectId(Integer.MAX_VALUE));
assertEquals(WiredSourceUtil.SOURCE_CLICKED_USER,
WiredUserConditionInputGuard.normalizeUserSource(WiredSourceUtil.SOURCE_CLICKED_USER));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, WiredUserConditionInputGuard.normalizeUserSource(777));
assertEquals(1, condition.normalizeQuantifier(1, 0));
assertEquals(0, condition.normalizeQuantifier(5, 0));
}
@@ -23,11 +25,13 @@ class WiredConditionAvatarPayloadGuardTest {
void handItemIdsSourcesAndQuantifiersAreBounded() {
WiredConditionHabboHasHandItem condition = new WiredConditionHabboHasHandItem(1, 1, null, "", 0, 0);
assertEquals(0, condition.normalizeHandItem(-1));
assertEquals(9, condition.normalizeHandItem(9));
assertEquals(WiredConditionHabboHasHandItem.MAX_HAND_ITEM_ID, condition.normalizeHandItem(Integer.MAX_VALUE));
assertEquals(WiredSourceUtil.SOURCE_SIGNAL, condition.normalizeUserSource(WiredSourceUtil.SOURCE_SIGNAL));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, condition.normalizeUserSource(-44));
assertEquals(0, WiredUserConditionInputGuard.normalizeHandItemId(-1));
assertEquals(9, WiredUserConditionInputGuard.normalizeHandItemId(9));
assertEquals(WiredConditionHabboHasHandItem.MAX_HAND_ITEM_ID,
WiredUserConditionInputGuard.normalizeHandItemId(Integer.MAX_VALUE));
assertEquals(WiredSourceUtil.SOURCE_SIGNAL,
WiredUserConditionInputGuard.normalizeUserSource(WiredSourceUtil.SOURCE_SIGNAL));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, WiredUserConditionInputGuard.normalizeUserSource(-44));
assertEquals(1, condition.normalizeQuantifier(1));
assertEquals(0, condition.normalizeQuantifier(8));
}
@@ -36,11 +40,13 @@ class WiredConditionAvatarPayloadGuardTest {
void badgeCodesSourcesAndQuantifiersAreBounded() {
WiredConditionHabboWearsBadge condition = new WiredConditionHabboWearsBadge(1, 1, null, "", 0, 0);
assertEquals("", condition.normalizeBadge(null));
assertEquals("ADM", condition.normalizeBadge(" ADM "));
assertEquals(WiredConditionHabboWearsBadge.MAX_BADGE_CODE_LENGTH, condition.normalizeBadge("x".repeat(200)).length());
assertEquals(WiredSourceUtil.SOURCE_SELECTOR, condition.normalizeUserSource(WiredSourceUtil.SOURCE_SELECTOR));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, condition.normalizeUserSource(66));
assertEquals("", WiredUserConditionInputGuard.normalizeBadgeCode(null));
assertEquals("ADM", WiredUserConditionInputGuard.normalizeBadgeCode(" ADM "));
assertEquals(WiredConditionHabboWearsBadge.MAX_BADGE_CODE_LENGTH,
WiredUserConditionInputGuard.normalizeBadgeCode("x".repeat(200)).length());
assertEquals(WiredSourceUtil.SOURCE_SELECTOR,
WiredUserConditionInputGuard.normalizeUserSource(WiredSourceUtil.SOURCE_SELECTOR));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, WiredUserConditionInputGuard.normalizeUserSource(66));
assertEquals(1, condition.normalizeQuantifier(1, 0));
assertEquals(0, condition.normalizeQuantifier(3, 0));
}
@@ -8,32 +8,31 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
class WiredConditionCountTimePayloadGuardTest {
@Test
void userCountLimitsAndSourcesAreBounded() {
WiredConditionHabboCount condition = new WiredConditionHabboCount(1, 1, null, "", 0, 0);
assertEquals(0, condition.normalizeLimit(-20));
assertEquals(25, condition.normalizeLimit(25));
assertEquals(WiredConditionHabboCount.MAX_USER_COUNT_LIMIT, condition.normalizeLimit(50_000));
assertEquals(WiredSourceUtil.SOURCE_SIGNAL, condition.normalizeUserSource(WiredSourceUtil.SOURCE_SIGNAL));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, condition.normalizeUserSource(-55));
assertEquals(0, WiredConditionInputGuard.normalizeUserCountRange(-20, -20)[0]);
assertEquals(25, WiredConditionInputGuard.normalizeUserCountRange(25, 25)[0]);
assertEquals(WiredConditionHabboCount.MAX_USER_COUNT_LIMIT,
WiredConditionInputGuard.normalizeUserCountRange(50_000, 50_000)[0]);
assertEquals(WiredSourceUtil.SOURCE_SIGNAL,
WiredConditionInputGuard.normalizeUserSource(WiredSourceUtil.SOURCE_SIGNAL));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, WiredConditionInputGuard.normalizeUserSource(-55));
}
@Test
void invertedUserCountRangesAreSorted() {
WiredConditionHabboCount condition = new WiredConditionHabboCount(1, 1, null, "", 0, 0);
int[] range = WiredConditionInputGuard.normalizeUserCountRange(80, 10);
condition.setLimits(80, 10);
assertEquals("{\"lowerLimit\":10,\"upperLimit\":80,\"userSource\":0}", condition.getWiredData());
assertEquals(10, range[0]);
assertEquals(80, range[1]);
}
@Test
void notUserCountUsesSameBounds() {
WiredConditionNotHabboCount condition = new WiredConditionNotHabboCount(1, 1, null, "", 0, 0);
assertEquals(0, condition.normalizeLimit(-1));
assertEquals(WiredConditionHabboCount.MAX_USER_COUNT_LIMIT, condition.normalizeLimit(9_999));
assertEquals(WiredSourceUtil.SOURCE_CLICKED_USER, condition.normalizeUserSource(WiredSourceUtil.SOURCE_CLICKED_USER));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, condition.normalizeUserSource(777));
assertEquals(0, WiredConditionInputGuard.normalizeUserCountRange(-1, -1)[0]);
assertEquals(WiredConditionHabboCount.MAX_USER_COUNT_LIMIT,
WiredConditionInputGuard.normalizeUserCountRange(9_999, 9_999)[0]);
assertEquals(WiredSourceUtil.SOURCE_CLICKED_USER,
WiredConditionInputGuard.normalizeUserSource(WiredSourceUtil.SOURCE_CLICKED_USER));
assertEquals(WiredSourceUtil.SOURCE_TRIGGER, WiredConditionInputGuard.normalizeUserSource(777));
}
@Test
@@ -33,13 +33,12 @@ class WiredConditionDatePayloadGuardTest {
@Test
void dateRangeBoundsAndSortsUnixTimestamps() {
WiredConditionDateRangeActive condition = new WiredConditionDateRangeActive(1, 1, null, "", 0, 0);
assertEquals(0, WiredDateRangeInputGuard.normalizeTimestamp(-1));
assertEquals(123, WiredDateRangeInputGuard.normalizeTimestamp(123));
assertEquals(0, condition.normalizeTimestamp(-1));
assertEquals(123, condition.normalizeTimestamp(123));
int[] range = WiredDateRangeInputGuard.normalizeRange(200, 100);
condition.setRange(200, 100);
assertEquals("{\"startDate\":100,\"endDate\":200}", condition.getWiredData());
assertEquals(0, range[0]);
assertEquals(0, range[1]);
}
}
@@ -1,6 +1,7 @@
package com.eu.habbo.habbohotel.items.interactions.wired.triggers;
import com.eu.habbo.habbohotel.games.GameTeamColors;
import com.eu.habbo.habbohotel.items.interactions.wired.WiredTimerInputGuard;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -8,27 +9,32 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
class WiredTriggerPayloadGuardTest {
@Test
void repeaterPayloadsFallBackOnInvalidDataAndClampUpperBound() {
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY, WiredTriggerRepeater.parseRepeatTime(null));
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY, WiredTriggerRepeater.parseRepeatTime("not-a-number"));
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY, WiredTriggerRepeater.parseRepeatTime("{broken"));
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY, WiredTriggerRepeater.parseRepeatTime("{\"repeatTime\":0}"));
assertEquals(WiredTriggerRepeater.MAX_DELAY, WiredTriggerRepeater.parseRepeatTime("{\"repeatTime\":2147483647}"));
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY,
WiredTimerInputGuard.normalizeStoredMillis(null, 500, WiredTriggerRepeater.DEFAULT_DELAY));
assertEquals(WiredTriggerRepeater.DEFAULT_DELAY,
WiredTimerInputGuard.normalizeStoredMillis(0, 500, WiredTriggerRepeater.DEFAULT_DELAY));
assertEquals(WiredTimerInputGuard.MAX_TIMER_MS,
WiredTimerInputGuard.normalizeStoredMillis(Integer.MAX_VALUE, 500, WiredTriggerRepeater.DEFAULT_DELAY));
assertEquals(WiredTriggerRepeaterLong.DEFAULT_DELAY, WiredTriggerRepeaterLong.parseRepeatTime(null));
assertEquals(WiredTriggerRepeaterLong.DEFAULT_DELAY, WiredTriggerRepeaterLong.parseRepeatTime("1"));
assertEquals(WiredTriggerRepeaterLong.MAX_DELAY, WiredTriggerRepeaterLong.parseRepeatTime("2147483647"));
assertEquals(WiredTriggerRepeaterLong.DEFAULT_DELAY,
WiredTimerInputGuard.normalizeStoredMillis(null, 5000, WiredTriggerRepeaterLong.DEFAULT_DELAY));
assertEquals(WiredTriggerRepeaterLong.DEFAULT_DELAY,
WiredTimerInputGuard.normalizeStoredMillis(1, 5000, WiredTriggerRepeaterLong.DEFAULT_DELAY));
assertEquals(WiredTimerInputGuard.MAX_TIMER_MS,
WiredTimerInputGuard.normalizeStoredMillis(Integer.MAX_VALUE, 5000, WiredTriggerRepeaterLong.DEFAULT_DELAY));
}
@Test
void atTimePayloadsFallBackOnInvalidDataAndClampUpperBound() {
assertEquals(WiredTriggerAtSetTime.DEFAULT_EXECUTE_TIME, WiredTriggerAtSetTime.parseExecuteTime(null));
assertEquals(WiredTriggerAtSetTime.DEFAULT_EXECUTE_TIME, WiredTriggerAtSetTime.parseExecuteTime("bad"));
assertEquals(WiredTriggerAtSetTime.DEFAULT_EXECUTE_TIME, WiredTriggerAtSetTime.parseExecuteTime("{\"executeTime\":0}"));
assertEquals(WiredTriggerAtSetTime.MAX_EXECUTE_TIME, WiredTriggerAtSetTime.parseExecuteTime("{\"executeTime\":2147483647}"));
assertEquals(20 * 500, WiredTimerInputGuard.normalizeStoredMillis(null, 500, 20 * 500));
assertEquals(20 * 500, WiredTimerInputGuard.normalizeStoredMillis(0, 500, 20 * 500));
assertEquals(WiredTimerInputGuard.MAX_TIMER_MS,
WiredTimerInputGuard.normalizeStoredMillis(Integer.MAX_VALUE, 500, 20 * 500));
assertEquals(WiredTriggerAtTimeLong.DEFAULT_EXECUTE_TIME, WiredTriggerAtTimeLong.parseExecuteTime("{broken"));
assertEquals(WiredTriggerAtTimeLong.DEFAULT_EXECUTE_TIME, WiredTriggerAtTimeLong.parseExecuteTime("1"));
assertEquals(WiredTriggerAtTimeLong.MAX_EXECUTE_TIME, WiredTriggerAtTimeLong.parseExecuteTime("2147483647"));
assertEquals(20 * 5000, WiredTimerInputGuard.normalizeStoredMillis(null, 5000, 20 * 5000));
assertEquals(20 * 5000, WiredTimerInputGuard.normalizeStoredMillis(1, 5000, 20 * 5000));
assertEquals(WiredTimerInputGuard.MAX_TIMER_MS,
WiredTimerInputGuard.normalizeStoredMillis(Integer.MAX_VALUE, 5000, 20 * 5000));
}
@Test