diff --git a/CMakeLists.txt b/CMakeLists.txt index eb66410b7..a82dd5e81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -207,6 +207,10 @@ if (NOT NUM_OF_PINGS_BEFORE_RECOVERY) set( NUM_OF_PINGS_BEFORE_RECOVERY 3 ) endif() +if (NOT SUBTITLES_WAYLAND_DISPLAY) + set( SUBTITLES_WAYLAND_DISPLAY "\"westeros-asplayer-subtitles\"" ) +endif() + if( NATIVE_BUILD ) add_compile_options(-Wno-error=attributes) add_subdirectory( stubs/rdk_gstreamer_utils ) diff --git a/common/public/include/SessionServerCommon.in b/common/public/include/SessionServerCommon.in index 1658a93bc..19e514711 100644 --- a/common/public/include/SessionServerCommon.in +++ b/common/public/include/SessionServerCommon.in @@ -68,6 +68,7 @@ struct AppConfig * "/tmp/bar" In all cases the name can be retrieved with getAppConnectionInfo() */ std::string clientDisplayName; /**< Socket name that Rialto client should connect to */ + std::string subtitlesDisplayName; /**< Wayland display name for subtitles */ }; /** @@ -105,6 +106,8 @@ struct ServerManagerConfig SocketPermissions sessionManagementSocketPermissions{}; /* Defines permissions of session management socket */ unsigned numOfFailedPingsBeforeRecovery{@NUM_OF_PINGS_BEFORE_RECOVERY@}; /* Defines how many pings have to fail before recovery action will be taken */ + std::string subtitlesDisplayName{@SUBTITLES_WAYLAND_DISPLAY@}; + /* Wayland display name for subtitles rendering */ }; } // namespace firebolt::rialto::common diff --git a/media/server/ipc/source/ServerManagerModuleService.cpp b/media/server/ipc/source/ServerManagerModuleService.cpp index 519c5b2d1..c5647d4e5 100644 --- a/media/server/ipc/source/ServerManagerModuleService.cpp +++ b/media/server/ipc/source/ServerManagerModuleService.cpp @@ -94,6 +94,7 @@ void ServerManagerModuleService::setConfiguration(::google::protobuf::RpcControl common::MaxResourceCapabilitites maxResource{request->resources().maxplaybacks(), request->resources().maxwebaudioplayers()}; const auto kClientDisplayName = request->has_clientdisplayname() ? request->clientdisplayname() : ""; + const auto kSubtitlesDisplayName = request->has_subtitlesdisplayname() ? request->subtitlesdisplayname() : ""; bool success{true}; if (request->has_sessionmanagementsocketfd()) { @@ -105,7 +106,8 @@ void ServerManagerModuleService::setConfiguration(::google::protobuf::RpcControl request->socketowner(), request->socketgroup()); } success &= m_sessionServerManager.configureServices(convertSessionServerState(request->initialsessionserverstate()), - maxResource, kClientDisplayName, request->appname()); + maxResource, kClientDisplayName, kSubtitlesDisplayName, + request->appname()); m_sessionServerManager.setLogLevels(static_cast(request->loglevels().defaultloglevels()), static_cast(request->loglevels().clientloglevels()), static_cast(request->loglevels().sessionserverloglevels()), diff --git a/media/server/service/include/IPlaybackService.h b/media/server/service/include/IPlaybackService.h index e3e8860ed..a736b62a6 100644 --- a/media/server/service/include/IPlaybackService.h +++ b/media/server/service/include/IPlaybackService.h @@ -47,6 +47,7 @@ class IPlaybackService virtual void setMaxPlaybacks(int maxPlaybacks) = 0; virtual void setMaxWebAudioPlayers(int maxWebAudio) = 0; virtual void setClientDisplayName(const std::string &clientDisplayName) const = 0; + virtual void setSubtitlesDisplayName(const std::string &subtitlesDisplayName) const = 0; virtual void setResourceManagerAppName(const std::string &appName) const = 0; virtual bool isActive() const = 0; diff --git a/media/server/service/include/ISessionServerManager.h b/media/server/service/include/ISessionServerManager.h index a320824c2..5696dc512 100644 --- a/media/server/service/include/ISessionServerManager.h +++ b/media/server/service/include/ISessionServerManager.h @@ -46,7 +46,8 @@ class ISessionServerManager virtual bool configureIpc(int32_t socketFd) = 0; virtual bool configureServices(const common::SessionServerState &state, const common::MaxResourceCapabilitites &maxResource, - const std::string &clientDisplayName, const std::string &appName) = 0; + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, + const std::string &appName) = 0; virtual bool setState(const common::SessionServerState &state) = 0; virtual void setLogLevels(RIALTO_DEBUG_LEVEL defaultLogLevels, RIALTO_DEBUG_LEVEL clientLogLevels, RIALTO_DEBUG_LEVEL sessionServerLogLevels, RIALTO_DEBUG_LEVEL ipcLogLevels, diff --git a/media/server/service/source/PlaybackService.cpp b/media/server/service/source/PlaybackService.cpp index 8a3b06ff0..cf50d7612 100644 --- a/media/server/service/source/PlaybackService.cpp +++ b/media/server/service/source/PlaybackService.cpp @@ -95,6 +95,15 @@ void PlaybackService::setClientDisplayName(const std::string &clientDisplayName) } } +void PlaybackService::setSubtitlesDisplayName(const std::string &subtitlesDisplayName) const +{ + // Method called during initialization only (before setting any state), no need to execute it on a task thread. + if (!subtitlesDisplayName.empty()) + { + setenv("SUBTITLES_WAYLAND_DISPLAY", subtitlesDisplayName.c_str(), 1); + } +} + void PlaybackService::setResourceManagerAppName(const std::string &appName) const { // Method called during initialization only (before setting any state), no need to execute it on a task thread. diff --git a/media/server/service/source/PlaybackService.h b/media/server/service/source/PlaybackService.h index abe226186..3223be661 100644 --- a/media/server/service/source/PlaybackService.h +++ b/media/server/service/source/PlaybackService.h @@ -61,6 +61,7 @@ class PlaybackService : public IPlaybackService void setMaxPlaybacks(int maxPlaybacks) override; void setMaxWebAudioPlayers(int maxWebAudio) override; void setClientDisplayName(const std::string &clientDisplayName) const override; + void setSubtitlesDisplayName(const std::string &subtitlesDisplayName) const override; void setResourceManagerAppName(const std::string &clientDisplayName) const override; bool isActive() const override; diff --git a/media/server/service/source/SessionServerManager.cpp b/media/server/service/source/SessionServerManager.cpp index b63a7752f..4beea4b33 100644 --- a/media/server/service/source/SessionServerManager.cpp +++ b/media/server/service/source/SessionServerManager.cpp @@ -130,12 +130,14 @@ bool SessionServerManager::configureIpc(int32_t socketFd) bool SessionServerManager::configureServices(const common::SessionServerState &state, const common::MaxResourceCapabilitites &maxResource, - const std::string &clientDisplayName, const std::string &appName) + const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const std::string &appName) { m_sessionManagementServer->start(); m_playbackService.setMaxPlaybacks(maxResource.maxPlaybacks); m_playbackService.setMaxWebAudioPlayers(maxResource.maxWebAudioPlayers); m_playbackService.setClientDisplayName(clientDisplayName); + m_playbackService.setSubtitlesDisplayName(subtitlesDisplayName); m_playbackService.setResourceManagerAppName(appName); return setState(state); } diff --git a/media/server/service/source/SessionServerManager.h b/media/server/service/source/SessionServerManager.h index 29f28871a..d1975cb31 100644 --- a/media/server/service/source/SessionServerManager.h +++ b/media/server/service/source/SessionServerManager.h @@ -54,7 +54,8 @@ class SessionServerManager : public ISessionServerManager const std::string &socketGroup) override; bool configureIpc(int32_t socketFd) override; bool configureServices(const common::SessionServerState &state, const common::MaxResourceCapabilitites &maxResource, - const std::string &clientDisplayName, const std::string &appName) override; + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, + const std::string &appName) override; bool setState(const common::SessionServerState &state) override; void setLogLevels(RIALTO_DEBUG_LEVEL defaultLogLevels, RIALTO_DEBUG_LEVEL clientLogLevels, RIALTO_DEBUG_LEVEL sessionServerLogLevels, RIALTO_DEBUG_LEVEL ipcLogLevels, diff --git a/proto/servermanagermodule.proto b/proto/servermanagermodule.proto index e697aaae2..a21dc206c 100644 --- a/proto/servermanagermodule.proto +++ b/proto/servermanagermodule.proto @@ -84,6 +84,7 @@ message Resources { * @param[in] socketGroup Socket file created with this group * @param[in] sessionManagementSocketFd File descriptor of socket used for SessionServer <-> Application communication * (optional, sessionManagementSocketName will be used if fd not present) + * @param[in] subtitlesDisplayName Wayland display name for subtitles rendering * */ message SetConfigurationRequest { @@ -98,6 +99,7 @@ message SetConfigurationRequest { optional string appName = 9; optional int32 sessionManagementSocketFd = 10; optional uint32 subtitleClockResyncInterval = 11; + optional string subtitlesDisplayName = 12; } message SetConfigurationResponse { } diff --git a/serverManager/common/source/ISessionServerApp.h b/serverManager/common/source/ISessionServerApp.h index 4c4db001b..2bd710191 100644 --- a/serverManager/common/source/ISessionServerApp.h +++ b/serverManager/common/source/ISessionServerApp.h @@ -48,6 +48,7 @@ class ISessionServerApp virtual std::string getSessionManagementSocketOwner() const = 0; virtual std::string getSessionManagementSocketGroup() const = 0; virtual std::string getClientDisplayName() const = 0; + virtual std::string getSubtitlesDisplayName() const = 0; virtual firebolt::rialto::common::SessionServerState getInitialState() const = 0; virtual int getServerId() const = 0; virtual const std::string &getAppName() const = 0; diff --git a/serverManager/common/source/SessionServerApp.cpp b/serverManager/common/source/SessionServerApp.cpp index ac5cac45a..710e79d6f 100644 --- a/serverManager/common/source/SessionServerApp.cpp +++ b/serverManager/common/source/SessionServerApp.cpp @@ -111,8 +111,9 @@ SessionServerApp::SessionServerApp(const std::string &appName, std::unique_ptr &&namedSocket) : m_kServerId{generateServerId()}, m_appName{appName}, m_initialState{initialState}, m_sessionManagementSocketName{getSessionManagementSocketPath(appConfig)}, - m_clientDisplayName{appConfig.clientDisplayName}, m_socks{-1, -1}, m_linuxWrapper{linuxWrapper}, - m_timerFactory{timerFactory}, m_sessionServerAppManager{sessionServerAppManager}, m_pid{-1}, m_isPreloaded{false}, + m_clientDisplayName{appConfig.clientDisplayName}, m_subtitlesDisplayName{appConfig.subtitlesDisplayName}, + m_socks{-1, -1}, m_linuxWrapper{linuxWrapper}, m_timerFactory{timerFactory}, + m_sessionServerAppManager{sessionServerAppManager}, m_pid{-1}, m_isPreloaded{false}, m_kSessionServerPath{sessionServerPath}, m_kSessionServerStartupTimeout{sessionServerStartupTimeout}, m_kSessionManagementSocketPermissions{socketPermissions}, m_kSessionManagementSocketOwner{socketOwner}, m_kSessionManagementSocketGroup{socketGroup}, m_childInitialized{false}, m_expectedState{initialState}, @@ -195,6 +196,7 @@ bool SessionServerApp::configure(const std::string &appName, m_initialState = initialState; m_sessionManagementSocketName = getSessionManagementSocketPath(appConfig); m_clientDisplayName = appConfig.clientDisplayName; + m_subtitlesDisplayName = appConfig.subtitlesDisplayName; m_isPreloaded = false; m_expectedState = initialState; if (m_namedSocket) @@ -239,6 +241,11 @@ std::string SessionServerApp::getClientDisplayName() const return m_clientDisplayName; } +std::string SessionServerApp::getSubtitlesDisplayName() const +{ + return m_subtitlesDisplayName; +} + firebolt::rialto::common::SessionServerState SessionServerApp::getInitialState() const { return m_initialState; diff --git a/serverManager/common/source/SessionServerApp.h b/serverManager/common/source/SessionServerApp.h index c67449ade..01e9242d9 100644 --- a/serverManager/common/source/SessionServerApp.h +++ b/serverManager/common/source/SessionServerApp.h @@ -71,6 +71,7 @@ class SessionServerApp : public ISessionServerApp const std::string &getAppName() const override; int getAppManagementSocketName() const override; std::string getClientDisplayName() const override; + std::string getSubtitlesDisplayName() const override; int getMaxPlaybackSessions() const override; int getMaxWebAudioPlayers() const override; void cancelStartupTimer() override; @@ -95,6 +96,7 @@ class SessionServerApp : public ISessionServerApp firebolt::rialto::common::SessionServerState m_initialState; std::string m_sessionManagementSocketName; std::string m_clientDisplayName; + std::string m_subtitlesDisplayName; std::array m_socks; std::shared_ptr m_linuxWrapper; std::shared_ptr m_timerFactory; diff --git a/serverManager/common/source/SessionServerAppManager.cpp b/serverManager/common/source/SessionServerAppManager.cpp index 08b465973..042d989b0 100644 --- a/serverManager/common/source/SessionServerAppManager.cpp +++ b/serverManager/common/source/SessionServerAppManager.cpp @@ -205,7 +205,8 @@ void SessionServerAppManager::handleRestartServer(int serverId) const std::string kAppName{sessionServer->getAppName()}; const firebolt::rialto::common::SessionServerState kState{sessionServer->getExpectedState()}; const firebolt::rialto::common::AppConfig kAppConfig{sessionServer->getSessionManagementSocketName(), - sessionServer->getClientDisplayName()}; + sessionServer->getClientDisplayName(), + sessionServer->getSubtitlesDisplayName()}; std::unique_ptr namedSocket{std::move(sessionServer->releaseNamedSocket())}; if (firebolt::rialto::common::SessionServerState::INACTIVE != kState && firebolt::rialto::common::SessionServerState::ACTIVE != kState) @@ -488,6 +489,7 @@ bool SessionServerAppManager::configureSessionServerWithSocketName(const std::sh const auto kInitialState{kSessionServer->getInitialState()}; const auto kSocketName{kSessionServer->getSessionManagementSocketName()}; const auto kClientDisplayName{kSessionServer->getClientDisplayName()}; + const auto kSubtitlesDisplayName{kSessionServer->getSubtitlesDisplayName()}; const auto kSocketPermissions{kSessionServer->getSessionManagementSocketPermissions()}; const auto kSocketOwner{kSessionServer->getSessionManagementSocketOwner()}; const auto kSocketGroup{kSessionServer->getSessionManagementSocketGroup()}; @@ -496,8 +498,8 @@ bool SessionServerAppManager::configureSessionServerWithSocketName(const std::sh const firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{kSessionServer->getMaxPlaybackSessions(), kSessionServer->getMaxWebAudioPlayers()}; if (!m_ipcController->performSetConfiguration(kSessionServer->getServerId(), kInitialState, kSocketName, - kClientDisplayName, kMaxResource, kSocketPermissions, kSocketOwner, - kSocketGroup, kAppName)) + kClientDisplayName, kSubtitlesDisplayName, kMaxResource, + kSocketPermissions, kSocketOwner, kSocketGroup, kAppName)) { RIALTO_SERVER_MANAGER_LOG_ERROR("Configuration of server with id %d failed - ipc error.", kSessionServer->getServerId()); @@ -513,12 +515,13 @@ bool SessionServerAppManager::configureSessionServerWithSocketFd(const std::shar const auto kInitialState{kSessionServer->getInitialState()}; const auto kSocketFd{kSessionServer->getSessionManagementSocketFd()}; const auto kClientDisplayName{kSessionServer->getClientDisplayName()}; + const auto kSubtitlesDisplayName{kSessionServer->getSubtitlesDisplayName()}; const auto kAppName{kSessionServer->getAppName()}; const firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{kSessionServer->getMaxPlaybackSessions(), kSessionServer->getMaxWebAudioPlayers()}; if (!m_ipcController->performSetConfiguration(kSessionServer->getServerId(), kInitialState, kSocketFd, - kClientDisplayName, kMaxResource, kAppName)) + kClientDisplayName, kSubtitlesDisplayName, kMaxResource, kAppName)) { RIALTO_SERVER_MANAGER_LOG_ERROR("Configuration of server with id %d failed - ipc error.", kSessionServer->getServerId()); diff --git a/serverManager/config/rialto-config.in.json b/serverManager/config/rialto-config.in.json index 2b89a8a93..401bacde7 100644 --- a/serverManager/config/rialto-config.in.json +++ b/serverManager/config/rialto-config.in.json @@ -31,5 +31,6 @@ "socketGroup" : @SOCKET_GROUP@, "numOfPreloadedServers" : @NUM_OF_PRELOADED_SERVERS@, "logLevel" : @LOG_LEVEL@, - "numOfPingsBeforeRecovery" : @NUM_OF_PINGS_BEFORE_RECOVERY@ + "numOfPingsBeforeRecovery" : @NUM_OF_PINGS_BEFORE_RECOVERY@, + "subtitlesDisplayName" : @SUBTITLES_WAYLAND_DISPLAY@ } diff --git a/serverManager/ipc/include/IController.h b/serverManager/ipc/include/IController.h index 74fb05cd6..befe6886f 100644 --- a/serverManager/ipc/include/IController.h +++ b/serverManager/ipc/include/IController.h @@ -42,11 +42,13 @@ class IController virtual void removeClient(int serverId) = 0; virtual bool performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, const std::string &socketName, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const unsigned int socketPermissions, const std::string &socketOwner, const std::string &socketGroup, const std::string &appName) = 0; virtual bool performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, int socketFd, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName) = 0; virtual bool performPing(int serverId, int pingId) = 0; diff --git a/serverManager/ipc/source/Client.cpp b/serverManager/ipc/source/Client.cpp index c11c0693c..187942ef4 100644 --- a/serverManager/ipc/source/Client.cpp +++ b/serverManager/ipc/source/Client.cpp @@ -202,6 +202,7 @@ bool Client::performSetState(const firebolt::rialto::common::SessionServerState bool Client::performSetConfiguration(const firebolt::rialto::common::SessionServerState &initialState, const std::string &socketName, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const unsigned int socketPermissions, const std::string &socketOwner, const std::string &socketGroup, const std::string &appName) const @@ -216,6 +217,7 @@ bool Client::performSetConfiguration(const firebolt::rialto::common::SessionServ rialto::SetConfigurationResponse response; request.set_sessionmanagementsocketname(socketName); request.set_clientdisplayname(clientDisplayName); + request.set_subtitlesdisplayname(subtitlesDisplayName); request.mutable_resources()->set_maxplaybacks(maxResource.maxPlaybacks); request.mutable_resources()->set_maxwebaudioplayers(maxResource.maxWebAudioPlayers); request.set_socketpermissions(socketPermissions); @@ -240,7 +242,7 @@ bool Client::performSetConfiguration(const firebolt::rialto::common::SessionServ } bool Client::performSetConfiguration(const firebolt::rialto::common::SessionServerState &initialState, int socketFd, - const std::string &clientDisplayName, + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName) const { @@ -254,6 +256,7 @@ bool Client::performSetConfiguration(const firebolt::rialto::common::SessionServ rialto::SetConfigurationResponse response; request.set_sessionmanagementsocketfd(socketFd); request.set_clientdisplayname(clientDisplayName); + request.set_subtitlesdisplayname(subtitlesDisplayName); request.mutable_resources()->set_maxplaybacks(maxResource.maxPlaybacks); request.mutable_resources()->set_maxwebaudioplayers(maxResource.maxWebAudioPlayers); request.set_appname(appName); diff --git a/serverManager/ipc/source/Client.h b/serverManager/ipc/source/Client.h index 0eb84aa6f..01349eec9 100644 --- a/serverManager/ipc/source/Client.h +++ b/serverManager/ipc/source/Client.h @@ -51,11 +51,12 @@ class Client bool performSetState(const firebolt::rialto::common::SessionServerState &state); bool performSetConfiguration(const firebolt::rialto::common::SessionServerState &initialState, const std::string &socketName, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const unsigned int socketPermissions, const std::string &socketOwner, const std::string &socketGroup, const std::string &appName) const; bool performSetConfiguration(const firebolt::rialto::common::SessionServerState &initialState, int socketFd, - const std::string &clientDisplayName, + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName) const; bool performPing(int pingId) const; diff --git a/serverManager/ipc/source/Controller.cpp b/serverManager/ipc/source/Controller.cpp index b3f8a818a..afe32ed73 100644 --- a/serverManager/ipc/source/Controller.cpp +++ b/serverManager/ipc/source/Controller.cpp @@ -65,6 +65,7 @@ bool Controller::performSetState(int serverId, const firebolt::rialto::common::S bool Controller::performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, const std::string &socketName, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const unsigned int socketPermissions, const std::string &socketOwner, const std::string &socketGroup, const std::string &appName) @@ -73,14 +74,15 @@ bool Controller::performSetConfiguration(int serverId, const firebolt::rialto::c auto client = m_clients.find(serverId); if (client != m_clients.end()) { - return client->second->performSetConfiguration(initialState, socketName, clientDisplayName, maxResource, - socketPermissions, socketOwner, socketGroup, appName); + return client->second->performSetConfiguration(initialState, socketName, clientDisplayName, subtitlesDisplayName, + maxResource, socketPermissions, socketOwner, socketGroup, appName); } return false; } bool Controller::performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, int socketFd, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName) { @@ -88,7 +90,8 @@ bool Controller::performSetConfiguration(int serverId, const firebolt::rialto::c auto client = m_clients.find(serverId); if (client != m_clients.end()) { - return client->second->performSetConfiguration(initialState, socketFd, clientDisplayName, maxResource, appName); + return client->second->performSetConfiguration(initialState, socketFd, clientDisplayName, subtitlesDisplayName, + maxResource, appName); } return false; } diff --git a/serverManager/ipc/source/Controller.h b/serverManager/ipc/source/Controller.h index 177205494..bf457fb21 100644 --- a/serverManager/ipc/source/Controller.h +++ b/serverManager/ipc/source/Controller.h @@ -52,11 +52,13 @@ class Controller : public IController void removeClient(int serverId) override; bool performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, const std::string &socketName, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const unsigned int socketPermissions, const std::string &socketOwner, const std::string &socketGroup, const std::string &appName) override; bool performSetConfiguration(int serverId, const firebolt::rialto::common::SessionServerState &initialState, int socketFd, const std::string &clientDisplayName, + const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName) override; bool performPing(int serverId, int pingId) override; diff --git a/serverManager/service/include/ConfigHelper.h b/serverManager/service/include/ConfigHelper.h index 7623ce4c0..bd03231d8 100644 --- a/serverManager/service/include/ConfigHelper.h +++ b/serverManager/service/include/ConfigHelper.h @@ -46,6 +46,7 @@ class ConfigHelper unsigned int getNumOfPreloadedServers() const; unsigned int getNumOfFailedPingsBeforeRecovery() const; const rialto::servermanager::service::LoggingLevels &getLoggingLevels() const; + const std::string &getSubtitlesDisplayName() const; #ifdef RIALTO_ENABLE_CONFIG_FILE private: @@ -65,6 +66,7 @@ class ConfigHelper unsigned int m_numOfPreloadedServers; unsigned int m_numOfFailedPingsBeforeRecovery; rialto::servermanager::service::LoggingLevels m_loggingLevels; + std::string m_subtitlesDisplayName; }; } // namespace rialto::servermanager::service diff --git a/serverManager/service/include/ConfigReader.h b/serverManager/service/include/ConfigReader.h index 6c2ba8735..949393b20 100644 --- a/serverManager/service/include/ConfigReader.h +++ b/serverManager/service/include/ConfigReader.h @@ -49,6 +49,7 @@ class ConfigReader : public IConfigReader std::optional getNumOfPreloadedServers() override; std::optional getLoggingLevels() override; std::optional getNumOfPingsBeforeRecovery() override; + std::optional getSubtitlesDisplayName() override; private: void parseEnvironmentVariables(std::shared_ptr root); @@ -62,6 +63,7 @@ class ConfigReader : public IConfigReader void parseNumOfPreloadedServers(std::shared_ptr root); void parseLogLevel(std::shared_ptr root); void parseNumOfPingsBeforeRecovery(std::shared_ptr root); + void parseSubtitlesDisplayName(std::shared_ptr root); std::list getListOfStrings(std::shared_ptr root, const std::string &valueName) const; @@ -84,6 +86,7 @@ class ConfigReader : public IConfigReader std::optional m_numOfPreloadedServers; std::optional m_loggingLevels; std::optional m_numOfPingsBeforeRecovery; + std::optional m_subtitlesDisplayName; }; } // namespace rialto::servermanager::service diff --git a/serverManager/service/include/IConfigReader.h b/serverManager/service/include/IConfigReader.h index 47f42c75a..d75d9c443 100644 --- a/serverManager/service/include/IConfigReader.h +++ b/serverManager/service/include/IConfigReader.h @@ -45,6 +45,7 @@ class IConfigReader virtual std::optional getNumOfPreloadedServers() = 0; virtual std::optional getLoggingLevels() = 0; virtual std::optional getNumOfPingsBeforeRecovery() = 0; + virtual std::optional getSubtitlesDisplayName() = 0; }; } // namespace rialto::servermanager::service diff --git a/serverManager/service/source/ConfigHelper.cpp b/serverManager/service/source/ConfigHelper.cpp index f12698ccc..b311d7dec 100644 --- a/serverManager/service/source/ConfigHelper.cpp +++ b/serverManager/service/source/ConfigHelper.cpp @@ -63,7 +63,8 @@ ConfigHelper::ConfigHelper(std::unique_ptr &&configReaderF m_sessionServerStartupTimeout{config.sessionServerStartupTimeout}, m_healthcheckInterval{config.healthcheckInterval}, m_socketPermissions{config.sessionManagementSocketPermissions}, m_numOfPreloadedServers{config.numOfPreloadedServers}, - m_numOfFailedPingsBeforeRecovery{config.numOfFailedPingsBeforeRecovery}, m_loggingLevels{} + m_numOfFailedPingsBeforeRecovery{config.numOfFailedPingsBeforeRecovery}, m_loggingLevels{}, + m_subtitlesDisplayName{config.subtitlesDisplayName} { #ifdef RIALTO_ENABLE_CONFIG_FILE // Read from least to most important file @@ -114,6 +115,11 @@ const rialto::servermanager::service::LoggingLevels &ConfigHelper::getLoggingLev return m_loggingLevels; } +const std::string &ConfigHelper::getSubtitlesDisplayName() const +{ + return m_subtitlesDisplayName; +} + #ifdef RIALTO_ENABLE_CONFIG_FILE void ConfigHelper::readConfigFile(const std::string &filePath) { @@ -169,6 +175,9 @@ void ConfigHelper::readConfigFile(const std::string &filePath) if (configReader->getLoggingLevels()) m_loggingLevels = configReader->getLoggingLevels().value(); + + if (configReader->getSubtitlesDisplayName()) + m_subtitlesDisplayName = configReader->getSubtitlesDisplayName().value(); } void ConfigHelper::mergeEnvVariables() diff --git a/serverManager/service/source/ConfigReader.cpp b/serverManager/service/source/ConfigReader.cpp index 551935997..4877b7849 100644 --- a/serverManager/service/source/ConfigReader.cpp +++ b/serverManager/service/source/ConfigReader.cpp @@ -56,6 +56,7 @@ bool ConfigReader::read() parseNumOfPreloadedServers(root); parseLogLevel(root); parseNumOfPingsBeforeRecovery(root); + parseSubtitlesDisplayName(root); return true; } @@ -162,6 +163,11 @@ void ConfigReader::parseNumOfPingsBeforeRecovery(std::shared_ptr root) +{ + m_subtitlesDisplayName = getString(root, "subtitlesDisplayName"); +} + std::list ConfigReader::getEnvironmentVariables() { return m_envVars; @@ -217,6 +223,11 @@ std::optional ConfigReader::getNumOfPingsBeforeRecovery() return m_numOfPingsBeforeRecovery; } +std::optional ConfigReader::getSubtitlesDisplayName() +{ + return m_subtitlesDisplayName; +} + std::list ConfigReader::getListOfStrings(std::shared_ptr root, const std::string &valueName) const { diff --git a/tests/componenttests/server/common/MessageBuilders.cpp b/tests/componenttests/server/common/MessageBuilders.cpp index 848b925f8..d8b568d36 100644 --- a/tests/componenttests/server/common/MessageBuilders.cpp +++ b/tests/componenttests/server/common/MessageBuilders.cpp @@ -33,6 +33,7 @@ ::rialto::SetConfigurationRequest createGenericSetConfigurationReq() constexpr int kLogLevel{kAllLogs}; constexpr int kMaxPlaybacks{2}; const std::string kDisplayName{"waylanddisplay"}; + const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; ::rialto::LogLevels logLevels; logLevels.set_defaultloglevels(kLogLevel); logLevels.set_clientloglevels(kLogLevel); @@ -44,6 +45,7 @@ ::rialto::SetConfigurationRequest createGenericSetConfigurationReq() ::rialto::SetConfigurationRequest request; request.set_sessionmanagementsocketname(kSocketName); request.set_clientdisplayname(kDisplayName); + request.set_subtitlesdisplayname(kSubtitlesDisplayName); request.mutable_resources()->set_maxplaybacks(kMaxPlaybacks); request.mutable_resources()->set_maxwebaudioplayers(kMaxPlaybacks); request.set_socketpermissions(kDefaultPermissions); diff --git a/tests/unittests/media/server/ipc/serverManagerModuleService/ServerManagerModuleServiceTestsFixture.cpp b/tests/unittests/media/server/ipc/serverManagerModuleService/ServerManagerModuleServiceTestsFixture.cpp index 5414ccad1..d387a5c88 100644 --- a/tests/unittests/media/server/ipc/serverManagerModuleService/ServerManagerModuleServiceTestsFixture.cpp +++ b/tests/unittests/media/server/ipc/serverManagerModuleService/ServerManagerModuleServiceTestsFixture.cpp @@ -38,6 +38,7 @@ constexpr int kPingId{29}; const std::string kSocketOwner{}; const std::string kSocketGroup{}; const std::string kAppId{"app"}; +const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; rialto::SessionServerState convertSessionServerState(const firebolt::rialto::common::SessionServerState &state) { @@ -83,7 +84,7 @@ void ServerManagerModuleServiceTests::sessionServerManagerWillSetConfiguration( .WillOnce(Return(true)); EXPECT_CALL(m_sessionServerManagerMock, configureServices(state, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kClientDisplayName, - kAppId)) + kSubtitlesDisplayName, kAppId)) .WillOnce(Return(true)); } @@ -93,7 +94,7 @@ void ServerManagerModuleServiceTests::sessionServerManagerWillSetConfigurationWi EXPECT_CALL(m_sessionServerManagerMock, configureIpc(kSocketFd)).WillOnce(Return(true)); EXPECT_CALL(m_sessionServerManagerMock, configureServices(state, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kClientDisplayName, - kAppId)) + kSubtitlesDisplayName, kAppId)) .WillOnce(Return(true)); } @@ -117,7 +118,7 @@ void ServerManagerModuleServiceTests::sessionServerManagerWillFailToSetConfigura .WillOnce(Return(true)); EXPECT_CALL(m_sessionServerManagerMock, configureServices(state, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kClientDisplayName, - kAppId)) + kSubtitlesDisplayName, kAppId)) .WillOnce(Return(false)); } @@ -127,7 +128,7 @@ void ServerManagerModuleServiceTests::sessionServerManagerWillFailToSetConfigura EXPECT_CALL(m_sessionServerManagerMock, configureIpc(kSocketFd)).WillOnce(Return(true)); EXPECT_CALL(m_sessionServerManagerMock, configureServices(state, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kClientDisplayName, - kAppId)) + kSubtitlesDisplayName, kAppId)) .WillOnce(Return(false)); } @@ -169,6 +170,7 @@ void ServerManagerModuleServiceTests::sendSetConfiguration(const firebolt::rialt request.set_socketowner(kSocketOwner); request.set_socketgroup(kSocketGroup); request.set_appname(kAppId); + request.set_subtitlesdisplayname(kSubtitlesDisplayName); m_sut->setConfiguration(m_controllerMock.get(), &request, &response, m_closureMock.get()); } @@ -190,6 +192,7 @@ void ServerManagerModuleServiceTests::sendSetConfigurationWithFd(const firebolt: request.set_initialsessionserverstate(convertSessionServerState(state)); request.set_clientdisplayname(kClientDisplayName); request.set_appname(kAppId); + request.set_subtitlesdisplayname(kSubtitlesDisplayName); m_sut->setConfiguration(m_controllerMock.get(), &request, &response, m_closureMock.get()); } diff --git a/tests/unittests/media/server/mocks/service/PlaybackServiceMock.h b/tests/unittests/media/server/mocks/service/PlaybackServiceMock.h index 86d96aa05..67840be73 100644 --- a/tests/unittests/media/server/mocks/service/PlaybackServiceMock.h +++ b/tests/unittests/media/server/mocks/service/PlaybackServiceMock.h @@ -36,6 +36,7 @@ class PlaybackServiceMock : public IPlaybackService MOCK_METHOD(void, setMaxPlaybacks, (int maxPlaybacks), (override)); MOCK_METHOD(void, setMaxWebAudioPlayers, (int maxWebAudio), (override)); MOCK_METHOD(void, setClientDisplayName, (const std::string &clientDisplayName), (const, override)); + MOCK_METHOD(void, setSubtitlesDisplayName, (const std::string &subtitlesDisplayName), (const, override)); MOCK_METHOD(void, setResourceManagerAppName, (const std::string &appName), (const, override)); MOCK_METHOD(bool, isActive, (), (const, override)); MOCK_METHOD(bool, getSharedMemory, (int32_t & fd, uint32_t &size), (const, override)); diff --git a/tests/unittests/media/server/mocks/service/SessionServerManagerMock.h b/tests/unittests/media/server/mocks/service/SessionServerManagerMock.h index 1355113a4..543eaa221 100644 --- a/tests/unittests/media/server/mocks/service/SessionServerManagerMock.h +++ b/tests/unittests/media/server/mocks/service/SessionServerManagerMock.h @@ -39,7 +39,8 @@ class SessionServerManagerMock : public ISessionServerManager MOCK_METHOD(bool, configureIpc, (int32_t socketFd), (override)); MOCK_METHOD(bool, configureServices, (const common::SessionServerState &state, const common::MaxResourceCapabilitites &maxResource, - const std::string &clientDisplayName, const std::string &appName), + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, + const std::string &appName), (override)); MOCK_METHOD(bool, setState, (const common::SessionServerState &state), (override)); MOCK_METHOD(void, setLogLevels, diff --git a/tests/unittests/media/server/service/playbackService/PlaybackServiceTests.cpp b/tests/unittests/media/server/service/playbackService/PlaybackServiceTests.cpp index 2b765f62f..58f2e1524 100644 --- a/tests/unittests/media/server/service/playbackService/PlaybackServiceTests.cpp +++ b/tests/unittests/media/server/service/playbackService/PlaybackServiceTests.cpp @@ -59,6 +59,13 @@ TEST_F(PlaybackServiceTests, shouldSetClientDisplayName) clientDisplayNameShouldBeSet(); } +TEST_F(PlaybackServiceTests, shouldSetSubtitlesDisplayName) +{ + createPlaybackServiceShouldSuccess(); + triggerSetSubtitlesDisplayName(); + subtitlesDisplayNameShouldBeSet(); +} + TEST_F(PlaybackServiceTests, shouldPing) { createPlaybackServiceShouldSuccess(); diff --git a/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.cpp b/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.cpp index 1b6591d2e..cb308543a 100644 --- a/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.cpp +++ b/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.cpp @@ -36,6 +36,7 @@ constexpr std::uint32_t kShmSize{2048}; constexpr std::int32_t kMaxPlaybacks{2}; constexpr std::int32_t kMaxWebAudioPlayers{2}; const std::string kClientDisplayName{"westeros-rialto"}; +const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; } // namespace PlaybackServiceTests::PlaybackServiceTests() @@ -105,6 +106,11 @@ void PlaybackServiceTests::triggerSetClientDisplayName() m_sut->setClientDisplayName(kClientDisplayName); } +void PlaybackServiceTests::triggerSetSubtitlesDisplayName() +{ + m_sut->setSubtitlesDisplayName(kSubtitlesDisplayName); +} + void PlaybackServiceTests::triggerPing() { m_sut->ping(m_heartbeatProcedureMock); @@ -153,3 +159,9 @@ void PlaybackServiceTests::clientDisplayNameShouldBeSet() EXPECT_EQ(std::string(getenv("WAYLAND_DISPLAY")), kClientDisplayName); unsetenv("WAYLAND_DISPLAY"); } + +void PlaybackServiceTests::subtitlesDisplayNameShouldBeSet() +{ + EXPECT_EQ(std::string(getenv("SUBTITLES_WAYLAND_DISPLAY")), kSubtitlesDisplayName); + unsetenv("SUBTITLES_WAYLAND_DISPLAY"); +} diff --git a/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.h b/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.h index 10f9d705c..3cb9c330e 100644 --- a/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.h +++ b/tests/unittests/media/server/service/playbackService/PlaybackServiceTestsFixture.h @@ -48,6 +48,7 @@ class PlaybackServiceTests : public testing::Test void triggerSetMaxPlaybacks(); void triggerSetMaxWebAudioPlayers(); void triggerSetClientDisplayName(); + void triggerSetSubtitlesDisplayName(); void triggerPing(); void createPlaybackServiceShouldSuccess(); @@ -58,6 +59,7 @@ class PlaybackServiceTests : public testing::Test void getMaxPlaybacksShouldSucceed(); void getMaxWebAudioPlayersShouldSucceed(); void clientDisplayNameShouldBeSet(); + void subtitlesDisplayNameShouldBeSet(); private: std::shared_ptr> m_mediaPipelineFactoryMock; diff --git a/tests/unittests/media/server/service/sessionServerManager/SessionServerManagerTestsFixture.cpp b/tests/unittests/media/server/service/sessionServerManager/SessionServerManagerTestsFixture.cpp index 14b8e0342..f83e21739 100644 --- a/tests/unittests/media/server/service/sessionServerManager/SessionServerManagerTestsFixture.cpp +++ b/tests/unittests/media/server/service/sessionServerManager/SessionServerManagerTestsFixture.cpp @@ -52,6 +52,7 @@ const std::string kSocketOwner{}; const std::string kSocketGroup{}; const std::string kAppId{"app"}; const std::string kClientDisplayName{"westeros-rialto"}; +const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; } // namespace SessionServerManagerTests::SessionServerManagerTests() @@ -168,6 +169,7 @@ void SessionServerManagerTests::willFailToSetConfigurationWhenSessionManagementS EXPECT_CALL(m_playbackServiceMock, setMaxPlaybacks(kMaxPlaybacks)); EXPECT_CALL(m_playbackServiceMock, setMaxWebAudioPlayers(kMaxWebAudioPlayers)); EXPECT_CALL(m_playbackServiceMock, setClientDisplayName(kClientDisplayName)); + EXPECT_CALL(m_playbackServiceMock, setSubtitlesDisplayName(kSubtitlesDisplayName)); EXPECT_CALL(m_playbackServiceMock, setResourceManagerAppName(kAppId)); EXPECT_CALL(m_playbackServiceMock, switchToInactive()); EXPECT_CALL(m_cdmServiceMock, switchToInactive()); @@ -176,7 +178,8 @@ void SessionServerManagerTests::willFailToSetConfigurationWhenSessionManagementS EXPECT_TRUE(m_sut); EXPECT_TRUE( m_sut->configureIpc(kSessionManagementSocket, kSessionManagementSocketPermissions, kSocketOwner, kSocketGroup)); - EXPECT_FALSE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, kAppId)); + EXPECT_FALSE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, + kSubtitlesDisplayName, kAppId)); } void SessionServerManagerTests::willSetConfiguration() @@ -188,6 +191,7 @@ void SessionServerManagerTests::willSetConfiguration() EXPECT_CALL(m_playbackServiceMock, setMaxPlaybacks(kMaxPlaybacks)); EXPECT_CALL(m_playbackServiceMock, setMaxWebAudioPlayers(kMaxWebAudioPlayers)); EXPECT_CALL(m_playbackServiceMock, setClientDisplayName(kClientDisplayName)); + EXPECT_CALL(m_playbackServiceMock, setSubtitlesDisplayName(kSubtitlesDisplayName)); EXPECT_CALL(m_playbackServiceMock, setResourceManagerAppName(kAppId)); EXPECT_CALL(m_playbackServiceMock, switchToInactive()); EXPECT_CALL(m_cdmServiceMock, switchToInactive()); @@ -197,7 +201,8 @@ void SessionServerManagerTests::willSetConfiguration() EXPECT_TRUE(m_sut); EXPECT_TRUE( m_sut->configureIpc(kSessionManagementSocket, kSessionManagementSocketPermissions, kSocketOwner, kSocketGroup)); - EXPECT_TRUE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, kAppId)); + EXPECT_TRUE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, + kSubtitlesDisplayName, kAppId)); } void SessionServerManagerTests::willFailToSetConfigurationWithFdWhenSessionManagementServerFailsToInit() @@ -214,6 +219,7 @@ void SessionServerManagerTests::willSetConfigurationWithFd() EXPECT_CALL(m_playbackServiceMock, setMaxPlaybacks(kMaxPlaybacks)); EXPECT_CALL(m_playbackServiceMock, setMaxWebAudioPlayers(kMaxWebAudioPlayers)); EXPECT_CALL(m_playbackServiceMock, setClientDisplayName(kClientDisplayName)); + EXPECT_CALL(m_playbackServiceMock, setSubtitlesDisplayName(kSubtitlesDisplayName)); EXPECT_CALL(m_playbackServiceMock, setResourceManagerAppName(kAppId)); EXPECT_CALL(m_playbackServiceMock, switchToInactive()); EXPECT_CALL(m_cdmServiceMock, switchToInactive()); @@ -222,7 +228,8 @@ void SessionServerManagerTests::willSetConfigurationWithFd() .WillOnce(Return(true)); EXPECT_TRUE(m_sut); EXPECT_TRUE(m_sut->configureIpc(kFd)); - EXPECT_TRUE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, kAppId)); + EXPECT_TRUE(m_sut->configureServices(SessionServerState::INACTIVE, kMaxResource, kClientDisplayName, + kSubtitlesDisplayName, kAppId)); } void SessionServerManagerTests::willFailToSetUnsupportedState() diff --git a/tests/unittests/serverManager/mocks/ConfigReaderMock.h b/tests/unittests/serverManager/mocks/ConfigReaderMock.h index aad9cfdd0..5f3d6ee38 100644 --- a/tests/unittests/serverManager/mocks/ConfigReaderMock.h +++ b/tests/unittests/serverManager/mocks/ConfigReaderMock.h @@ -41,6 +41,7 @@ class ConfigReaderMock : public IConfigReader MOCK_METHOD(std::optional, getNumOfPreloadedServers, (), (override)); MOCK_METHOD(std::optional, getLoggingLevels, (), (override)); MOCK_METHOD(std::optional, getNumOfPingsBeforeRecovery, (), (override)); + MOCK_METHOD(std::optional, getSubtitlesDisplayName, (), (override)); }; } // namespace rialto::servermanager::service diff --git a/tests/unittests/serverManager/mocks/ControllerMock.h b/tests/unittests/serverManager/mocks/ControllerMock.h index 6d475004d..ae5e62a17 100644 --- a/tests/unittests/serverManager/mocks/ControllerMock.h +++ b/tests/unittests/serverManager/mocks/ControllerMock.h @@ -36,12 +36,12 @@ class ControllerMock : public IController MOCK_METHOD(void, removeClient, (int), (override)); MOCK_METHOD(bool, performSetConfiguration, (int, const firebolt::rialto::common::SessionServerState &, const std::string &, const std::string &, - const firebolt::rialto::common::MaxResourceCapabilitites &, const unsigned int, const std::string &, - const std::string &, const std::string &), + const std::string &, const firebolt::rialto::common::MaxResourceCapabilitites &, const unsigned int, + const std::string &, const std::string &, const std::string &), (override)); MOCK_METHOD(bool, performSetConfiguration, (int serverId, const firebolt::rialto::common::SessionServerState &initialState, int socketFd, - const std::string &clientDisplayName, + const std::string &clientDisplayName, const std::string &subtitlesDisplayName, const firebolt::rialto::common::MaxResourceCapabilitites &maxResource, const std::string &appName), (override)); MOCK_METHOD(bool, performSetState, (int, const firebolt::rialto::common::SessionServerState &), (override)); diff --git a/tests/unittests/serverManager/mocks/SessionServerAppMock.h b/tests/unittests/serverManager/mocks/SessionServerAppMock.h index c066672b0..7b122450f 100644 --- a/tests/unittests/serverManager/mocks/SessionServerAppMock.h +++ b/tests/unittests/serverManager/mocks/SessionServerAppMock.h @@ -46,6 +46,7 @@ class SessionServerAppMock : public ISessionServerApp MOCK_METHOD(std::string, getSessionManagementSocketOwner, (), (const, override)); MOCK_METHOD(std::string, getSessionManagementSocketGroup, (), (const, override)); MOCK_METHOD(std::string, getClientDisplayName, (), (const, override)); + MOCK_METHOD(std::string, getSubtitlesDisplayName, (), (const, override)); MOCK_METHOD(firebolt::rialto::common::SessionServerState, getInitialState, (), (const, override)); MOCK_METHOD(int, getServerId, (), (const, override)); MOCK_METHOD(const std::string &, getAppName, (), (const, override)); diff --git a/tests/unittests/serverManager/unittests/common/SessionServerAppManagerTestsFixture.cpp b/tests/unittests/serverManager/unittests/common/SessionServerAppManagerTestsFixture.cpp index 83994a266..9788154c5 100644 --- a/tests/unittests/serverManager/unittests/common/SessionServerAppManagerTestsFixture.cpp +++ b/tests/unittests/serverManager/unittests/common/SessionServerAppManagerTestsFixture.cpp @@ -59,9 +59,10 @@ constexpr rialto::servermanager::service::LoggingLevels rialto::servermanager::service::LoggingLevel::WARNING, rialto::servermanager::service::LoggingLevel::MILESTONE, rialto::servermanager::service::LoggingLevel::INFO}; -const firebolt::rialto::common::AppConfig kAppConfig{kSessionServerSocketName}; -constexpr int kPingId{125}; const std::string kClientDisplayName{"westeros-rialto"}; +const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; +const firebolt::rialto::common::AppConfig kAppConfig{kSessionServerSocketName, kClientDisplayName, kSubtitlesDisplayName}; +constexpr int kPingId{125}; constexpr unsigned int kSocketPermissions{0777}; const std::string kSocketOwner; const std::string kSocketGroup; @@ -232,6 +233,7 @@ void SessionServerAppManagerTests::sessionServerWillChangeStateToUninitialized() .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillRepeatedly(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getAppName()).WillOnce(ReturnRef(kAppName)).RetiresOnSaturation(); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketPermissions()).WillOnce(Return(kSocketPermissions)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketOwner()).WillOnce(Return(kSocketOwner)); @@ -241,7 +243,7 @@ void SessionServerAppManagerTests::sessionServerWillChangeStateToUninitialized() EXPECT_CALL(*m_sessionServerAppMock, isPreloaded()).WillOnce(Return(false)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketName, kClientDisplayName, + kSessionServerSocketName, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kSocketPermissions, kSocketOwner, kSocketGroup, kAppName)) .WillOnce(Return(true)); @@ -271,6 +273,7 @@ void SessionServerAppManagerTests::preloadedSessionServerWillSetConfiguration() .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillRepeatedly(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketPermissions()).WillOnce(Return(kSocketPermissions)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketOwner()).WillOnce(Return(kSocketOwner)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketGroup()).WillOnce(Return(kSocketGroup)); @@ -278,7 +281,7 @@ void SessionServerAppManagerTests::preloadedSessionServerWillSetConfiguration() EXPECT_CALL(*m_sessionServerAppMock, getMaxWebAudioPlayers()).WillOnce(Return(kMaxWebAudioPlayers)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketName, kClientDisplayName, + kSessionServerSocketName, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kSocketPermissions, kSocketOwner, kSocketGroup, kEmptyAppName)) .WillOnce(Return(true)); @@ -299,11 +302,12 @@ void SessionServerAppManagerTests::preloadedSessionServerWillSetConfigurationWit .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketFd()).WillOnce(Return(kSessionServerSocketFd)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getMaxPlaybackSessions()).WillOnce(Return(kMaxSessions)); EXPECT_CALL(*m_sessionServerAppMock, getMaxWebAudioPlayers()).WillOnce(Return(kMaxWebAudioPlayers)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketFd, kClientDisplayName, + kSessionServerSocketFd, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kEmptyAppName)) .WillOnce(Return(true)); EXPECT_CALL(m_sessionServerAppFactoryMock, create(_, _)).WillOnce(Return(m_secondSessionServerAppMock)); @@ -319,13 +323,14 @@ void SessionServerAppManagerTests::sessionServerWillFailToSetConfigurationWithFd .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillRepeatedly(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getAppName()).WillOnce(ReturnRef(kAppName)).RetiresOnSaturation(); EXPECT_CALL(*m_sessionServerAppMock, getMaxPlaybackSessions()).WillOnce(Return(kMaxSessions)); EXPECT_CALL(*m_sessionServerAppMock, getMaxWebAudioPlayers()).WillOnce(Return(kMaxWebAudioPlayers)); EXPECT_CALL(*m_sessionServerAppMock, isPreloaded()).WillRepeatedly(Return(false)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketFd, kClientDisplayName, + kSessionServerSocketFd, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kAppName)) .WillOnce(Return(false)); EXPECT_CALL(*m_stateObserver, stateChanged(kAppName, firebolt::rialto::common::SessionServerState::UNINITIALIZED)); @@ -339,6 +344,7 @@ void SessionServerAppManagerTests::sessionServerWillFailToSetConfiguration() .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillRepeatedly(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getAppName()).WillOnce(ReturnRef(kAppName)).RetiresOnSaturation(); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketPermissions()).WillOnce(Return(kSocketPermissions)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketOwner()).WillOnce(Return(kSocketOwner)); @@ -348,7 +354,7 @@ void SessionServerAppManagerTests::sessionServerWillFailToSetConfiguration() EXPECT_CALL(*m_sessionServerAppMock, isPreloaded()).WillRepeatedly(Return(false)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketName, kClientDisplayName, + kSessionServerSocketName, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kSocketPermissions, kSocketOwner, kSocketGroup, kAppName)) .WillOnce(Return(false)); @@ -362,6 +368,7 @@ void SessionServerAppManagerTests::preloadedSessionServerWillFailToSetConfigurat .WillOnce(Return(firebolt::rialto::common::SessionServerState::INACTIVE)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillRepeatedly(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, getAppName()).WillOnce(ReturnRef(kAppName)).RetiresOnSaturation(); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketPermissions()).WillOnce(Return(kSocketPermissions)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketOwner()).WillOnce(Return(kSocketOwner)); @@ -370,7 +377,7 @@ void SessionServerAppManagerTests::preloadedSessionServerWillFailToSetConfigurat EXPECT_CALL(*m_sessionServerAppMock, getMaxWebAudioPlayers()).WillOnce(Return(kMaxWebAudioPlayers)); EXPECT_CALL(m_controllerMock, performSetConfiguration(kServerId, firebolt::rialto::common::SessionServerState::INACTIVE, - kSessionServerSocketName, kClientDisplayName, + kSessionServerSocketName, kClientDisplayName, kSubtitlesDisplayName, MaxResourceMatcher(kMaxSessions, kMaxWebAudioPlayers), kSocketPermissions, kSocketOwner, kSocketGroup, kAppName)) .WillOnce(Return(false)); @@ -446,6 +453,7 @@ void SessionServerAppManagerTests::sessionServerWillBeRestarted(const firebolt:: EXPECT_CALL(*m_sessionServerAppMock, getExpectedState()).WillOnce(Return(state)); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillOnce(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, releaseNamedSocketRef()).WillOnce(ReturnRef(m_namedSocket)); sessionServerWillKillRunningApplication(); sessionServerWillIndicateStateChange(firebolt::rialto::common::SessionServerState::NOT_RUNNING); @@ -468,6 +476,7 @@ void SessionServerAppManagerTests::sessionServerWillRestartWillBeSkipped() EXPECT_CALL(m_healthcheckServiceMock, onServerRemoved(kServerId)).RetiresOnSaturation(); EXPECT_CALL(*m_sessionServerAppMock, getSessionManagementSocketName()).WillOnce(Return(kSessionServerSocketName)); EXPECT_CALL(*m_sessionServerAppMock, getClientDisplayName()).WillOnce(Return(kClientDisplayName)); + EXPECT_CALL(*m_sessionServerAppMock, getSubtitlesDisplayName()).WillOnce(Return(kSubtitlesDisplayName)); EXPECT_CALL(*m_sessionServerAppMock, releaseNamedSocketRef()).WillOnce(ReturnRef(m_namedSocket)); } diff --git a/tests/unittests/serverManager/unittests/ipc/IpcTestsFixture.cpp b/tests/unittests/serverManager/unittests/ipc/IpcTestsFixture.cpp index 03239239f..31be74c33 100644 --- a/tests/unittests/serverManager/unittests/ipc/IpcTestsFixture.cpp +++ b/tests/unittests/serverManager/unittests/ipc/IpcTestsFixture.cpp @@ -133,6 +133,7 @@ bool IpcTests::triggerPerformSetConfiguration() const auto kInitialState{firebolt::rialto::common::SessionServerState::INACTIVE}; const std::string kSocketName{getenv("RIALTO_SOCKET_PATH")}; const std::string kClientSocketName{"westeros-rialto"}; + const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; constexpr firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{2, 1}; constexpr unsigned int kSocketPermissions{0777}; // Empty strings for kSocketOwner and kSocketGroup means that chown() won't be called. This will leave the created @@ -140,8 +141,8 @@ bool IpcTests::triggerPerformSetConfiguration() const std::string kSocketOwner{}; const std::string kSocketGroup{}; const std::string kAppId{"app"}; - return m_sut->performSetConfiguration(kServerId, kInitialState, kSocketName, kClientSocketName, kMaxResource, - kSocketPermissions, kSocketOwner, kSocketGroup, kAppId); + return m_sut->performSetConfiguration(kServerId, kInitialState, kSocketName, kClientSocketName, kSubtitlesDisplayName, + kMaxResource, kSocketPermissions, kSocketOwner, kSocketGroup, kAppId); } bool IpcTests::triggerPerformSetConfigurationWithFd() @@ -150,9 +151,11 @@ bool IpcTests::triggerPerformSetConfigurationWithFd() const auto kInitialState{firebolt::rialto::common::SessionServerState::INACTIVE}; constexpr int kSocketFd{123}; const std::string kClientSocketName{"westeros-rialto"}; + const std::string kSubtitlesDisplayName{"westeros-asplayer-subtitles"}; constexpr firebolt::rialto::common::MaxResourceCapabilitites kMaxResource{2, 1}; const std::string kAppId{"app"}; - return m_sut->performSetConfiguration(kServerId, kInitialState, kSocketFd, kClientSocketName, kMaxResource, kAppId); + return m_sut->performSetConfiguration(kServerId, kInitialState, kSocketFd, kClientSocketName, kSubtitlesDisplayName, + kMaxResource, kAppId); } bool IpcTests::triggerPerformPing() diff --git a/tests/unittests/serverManager/unittests/service/ConfigHelperTests.cpp b/tests/unittests/serverManager/unittests/service/ConfigHelperTests.cpp index 866b9921e..2f036a7d5 100644 --- a/tests/unittests/serverManager/unittests/service/ConfigHelperTests.cpp +++ b/tests/unittests/serverManager/unittests/service/ConfigHelperTests.cpp @@ -196,6 +196,7 @@ class ConfigHelperTests : public testing::Test EXPECT_CALL(*m_configReaderMock, getSocketPermissions()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getSocketOwner()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getSocketGroup()).WillOnce(Return(std::nullopt)); + EXPECT_CALL(*m_configReaderMock, getSubtitlesDisplayName()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getNumOfPreloadedServers()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getLoggingLevels()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getNumOfPingsBeforeRecovery()).WillOnce(Return(std::nullopt)); @@ -214,6 +215,7 @@ class ConfigHelperTests : public testing::Test EXPECT_CALL(*m_configReaderMock, getSocketPermissions()).WillRepeatedly(Return(kJsonSocketPermissions)); EXPECT_CALL(*m_configReaderMock, getSocketOwner()).WillRepeatedly(Return(kJsonSocketPermissions.owner)); EXPECT_CALL(*m_configReaderMock, getSocketGroup()).WillRepeatedly(Return(kJsonSocketPermissions.group)); + EXPECT_CALL(*m_configReaderMock, getSubtitlesDisplayName()).WillRepeatedly(Return(std::nullopt)); EXPECT_CALL(*m_configReaderMock, getNumOfPreloadedServers()).WillRepeatedly(Return(kJsonNumOfPreloadedServers)); EXPECT_CALL(*m_configReaderMock, getLoggingLevels()).WillRepeatedly(Return(kJsonLoggingLevels)); EXPECT_CALL(*m_configReaderMock, getNumOfPingsBeforeRecovery()) @@ -241,6 +243,7 @@ class ConfigHelperTests : public testing::Test EXPECT_CALL(*m_configOverridesReaderMock, getSocketPermissions()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getSocketOwner()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getSocketGroup()).WillOnce(Return(std::nullopt)); + EXPECT_CALL(*m_configOverridesReaderMock, getSubtitlesDisplayName()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getNumOfPreloadedServers()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getLoggingLevels()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getNumOfPingsBeforeRecovery()).WillOnce(Return(std::nullopt)); @@ -266,6 +269,7 @@ class ConfigHelperTests : public testing::Test .WillRepeatedly(Return(kJsonOverrideSocketPermissions.owner)); EXPECT_CALL(*m_configOverridesReaderMock, getSocketGroup()) .WillRepeatedly(Return(kJsonOverrideSocketPermissions.group)); + EXPECT_CALL(*m_configOverridesReaderMock, getSubtitlesDisplayName()).WillRepeatedly(Return(std::nullopt)); EXPECT_CALL(*m_configOverridesReaderMock, getNumOfPreloadedServers()) .WillRepeatedly(Return(kJsonOverrideNumOfPreloadedServers)); EXPECT_CALL(*m_configOverridesReaderMock, getLoggingLevels()).WillRepeatedly(Return(kJsonOverrideLoggingLevels)); @@ -294,6 +298,7 @@ class ConfigHelperTests : public testing::Test EXPECT_CALL(*m_configSocReaderMock, getSocketPermissions()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getSocketOwner()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getSocketGroup()).WillOnce(Return(std::nullopt)); + EXPECT_CALL(*m_configSocReaderMock, getSubtitlesDisplayName()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getNumOfPreloadedServers()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getLoggingLevels()).WillOnce(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getNumOfPingsBeforeRecovery()).WillOnce(Return(std::nullopt)); @@ -313,6 +318,7 @@ class ConfigHelperTests : public testing::Test EXPECT_CALL(*m_configSocReaderMock, getSocketPermissions()).WillRepeatedly(Return(kJsonSocSocketPermissions)); EXPECT_CALL(*m_configSocReaderMock, getSocketOwner()).WillRepeatedly(Return(kJsonSocSocketPermissions.owner)); EXPECT_CALL(*m_configSocReaderMock, getSocketGroup()).WillRepeatedly(Return(kJsonSocSocketPermissions.group)); + EXPECT_CALL(*m_configSocReaderMock, getSubtitlesDisplayName()).WillRepeatedly(Return(std::nullopt)); EXPECT_CALL(*m_configSocReaderMock, getNumOfPreloadedServers()).WillRepeatedly(Return(kJsonSocNumOfPreloadedServers)); EXPECT_CALL(*m_configSocReaderMock, getLoggingLevels()).WillRepeatedly(Return(kJsonSocLoggingLevels)); EXPECT_CALL(*m_configSocReaderMock, getNumOfPingsBeforeRecovery()) diff --git a/tests/unittests/serverManager/unittests/service/ConfigReaderTests.cpp b/tests/unittests/serverManager/unittests/service/ConfigReaderTests.cpp index eff8204dc..774fb58d8 100644 --- a/tests/unittests/serverManager/unittests/service/ConfigReaderTests.cpp +++ b/tests/unittests/serverManager/unittests/service/ConfigReaderTests.cpp @@ -323,6 +323,23 @@ TEST_F(ConfigReaderTests, socketGroupExists) EXPECT_EQ(m_sut->getSocketGroup().value(), kTestValue); } +TEST_F(ConfigReaderTests, subtitlesDisplayNameNotString) +{ + expectSuccessfulParsing(); + expectNotString("subtitlesDisplayName"); + EXPECT_TRUE(m_sut->read()); + EXPECT_EQ(m_sut->getSubtitlesDisplayName().has_value(), false); +} + +TEST_F(ConfigReaderTests, subtitlesDisplayNameExists) +{ + const char *kTestValue = "westeros-asplayer-subtitles"; + expectSuccessfulParsing(); + expectReturnString("subtitlesDisplayName", kTestValue); + EXPECT_TRUE(m_sut->read()); + EXPECT_EQ(m_sut->getSubtitlesDisplayName().value(), kTestValue); +} + TEST_F(ConfigReaderTests, numOfPreloadedServersNotUint) { expectSuccessfulParsing();