Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions ballerina/tests/service_config_test.bal
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,106 @@ public function testServiceConfigRelativePath() {

test:assertEquals(relativeConfig.path, "relative/path");
}

// ===========================================================================
// TEST: Invalid regex pattern in @ServiceConfig fileNamePattern
// ===========================================================================
@test:Config {}
public function testServiceConfigInvalidFileNamePattern() returns error? {
ListenerConfiguration config = {
protocol: FTP,
host: "127.0.0.1",
port: 21212,
auth: {credentials: {username: "wso2", password: "wso2123"}},
pollingInterval: 2
};
Listener ftpListener = check new (config);

Service invalidRegexService = @ServiceConfig {
path: "/home/in/invalid-regex",
fileNamePattern: "[unclosed" // Invalid regex - unclosed bracket
} service object {
remote function onFileChange(Caller caller, WatchEvent & readonly event) {
}
};

error? result = ftpListener.attach(invalidRegexService, "invalidRegexService");
test:assertTrue(result is InvalidConfigError,
msg = "Expected InvalidConfigError for invalid regex pattern in @ServiceConfig.fileNamePattern");
if result is InvalidConfigError {
test:assertTrue(result.message().includes("Invalid regex pattern"),
msg = "InvalidConfigError message should indicate invalid regex");
}
}

// ===========================================================================
// TEST: Invalid regex pattern in @ServiceConfig fileDependencyConditions targetPattern
// ===========================================================================
@test:Config {}
public function testServiceConfigInvalidTargetPattern() returns error? {
ListenerConfiguration config = {
protocol: FTP,
host: "127.0.0.1",
port: 21212,
auth: {credentials: {username: "wso2", password: "wso2123"}},
pollingInterval: 2
};
Listener ftpListener = check new (config);

Service invalidTargetService = @ServiceConfig {
path: "/home/in/invalid-target",
fileDependencyConditions: [
{
targetPattern: "(invalid*regex", // Invalid regex - unclosed parenthesis
requiredFiles: ["data.txt"]
}
]
} service object {
remote function onFileChange(Caller caller, WatchEvent & readonly event) {
}
};

error? result = ftpListener.attach(invalidTargetService, "invalidTargetService");
test:assertTrue(result is InvalidConfigError,
msg = "Expected InvalidConfigError for invalid regex pattern in @ServiceConfig.fileDependencyConditions.targetPattern");
if result is InvalidConfigError {
test:assertTrue(result.message().includes("Invalid regex pattern"),
msg = "InvalidConfigError message should indicate invalid regex");
}
}

// ===========================================================================
// TEST: Invalid regex pattern in @ServiceConfig fileDependencyConditions requiredFiles
// ===========================================================================
@test:Config {}
public function testServiceConfigInvalidRequiredFilesPattern() returns error? {
ListenerConfiguration config = {
protocol: FTP,
host: "127.0.0.1",
port: 21212,
auth: {credentials: {username: "wso2", password: "wso2123"}},
pollingInterval: 2
};
Listener ftpListener = check new (config);

Service invalidRequiredService = @ServiceConfig {
path: "/home/in/invalid-required",
fileDependencyConditions: [
{
targetPattern: "data.*\\.csv",
requiredFiles: ["[broken-regex"] // Invalid regex - unclosed bracket
}
]
} service object {
remote function onFileChange(Caller caller, WatchEvent & readonly event) {
}
};

error? result = ftpListener.attach(invalidRequiredService, "invalidRequiredService");
test:assertTrue(result is InvalidConfigError,
msg = "Expected InvalidConfigError for invalid regex pattern in @ServiceConfig.fileDependencyConditions.requiredFiles");
if result is InvalidConfigError {
test:assertTrue(result.message().includes("Invalid regex pattern"),
msg = "InvalidConfigError message should indicate invalid regex");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public class MultiPathServerConnector implements RemoteFileSystemServerConnector
private final Map<String, RemoteFileSystemConsumer> pathConsumers = new ConcurrentHashMap<>();
private final Map<String, Object> baseProperties;
private AtomicBoolean isPollOperationOccupied = new AtomicBoolean(false);
private FileSystemManager fileSystemManager;
private FileSystemOptions fileSystemOptions;
private volatile FileSystemManager fileSystemManager;
private volatile FileSystemOptions fileSystemOptions;

public MultiPathServerConnector(Map<String, Object> baseProperties, FtpListener ftpListener) {
this.baseProperties = new HashMap<>(baseProperties);
Expand Down
Loading