Files
DarkflameServer/tests/dGameTests/dGameMessagesTests/InstanceLimitsTests.cpp
Aaron Kimbrell e164f9aaed fix: the master server only starts instances of zones in the ZoneTable
A transfer or private zone request started a world server for whatever
map ID it named, and for as many instances as were asked for. A new
instance now needs a row in the ZoneTable for its zone, and no more
than max_instances (masterconfig.ini, 256 by default, 0 for no limit)
run at once. The character select has no row and is always started.

A request that gets no instance is logged and dropped. Before, the
handlers went on to use the missing instance.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-10 16:28:34 -06:00

35 lines
1.4 KiB
C++

#include <gtest/gtest.h>
#include "InstanceLimits.h"
using InstanceLimits::CheckNewInstance;
using InstanceLimits::eNewInstance;
TEST(InstanceLimitsTest, AZoneOfTheZoneTableIsStarted) {
EXPECT_EQ(CheckNewInstance(1000, true, 0, 256), eNewInstance::Allowed);
EXPECT_EQ(CheckNewInstance(1150, true, 255, 256), eNewInstance::Allowed);
}
TEST(InstanceLimitsTest, AZoneTheZoneTableDoesNotHaveIsRefused) {
EXPECT_EQ(CheckNewInstance(31337, false, 0, 256), eNewInstance::UnknownZone);
EXPECT_EQ(CheckNewInstance(31337, false, 0, 0), eNewInstance::UnknownZone);
// The unknown zone is the reason given, also when the limit is reached too
EXPECT_EQ(CheckNewInstance(31337, false, 256, 256), eNewInstance::UnknownZone);
}
TEST(InstanceLimitsTest, NoInstanceIsStartedPastTheLimit) {
EXPECT_EQ(CheckNewInstance(1000, true, 256, 256), eNewInstance::TooManyInstances);
EXPECT_EQ(CheckNewInstance(1000, true, 1000, 256), eNewInstance::TooManyInstances);
EXPECT_EQ(CheckNewInstance(1000, true, 1, 1), eNewInstance::TooManyInstances);
}
TEST(InstanceLimitsTest, ALimitOfZeroIsNoLimit) {
EXPECT_EQ(CheckNewInstance(1000, true, 100000, 0), eNewInstance::Allowed);
}
TEST(InstanceLimitsTest, TheCharacterSelectIsAlwaysStarted) {
// Zone 0 has no row in the ZoneTable
EXPECT_EQ(CheckNewInstance(0, false, 0, 256), eNewInstance::Allowed);
EXPECT_EQ(CheckNewInstance(0, false, 256, 256), eNewInstance::Allowed);
}