예제 #1
0
        public CoreControllerTests()
        {
            m_coreLinkMock = new Mock <ICoreLink>();
            ICoreLink coreLink = m_coreLinkMock.Object;

            m_controller = new CoreController(coreLink, TimeoutMs / 5);
        }
예제 #2
0
        public async Task GetsAsyncConversationError()
        {
            const string errorMessage = "Foo bar";

            var       conv            = new CommandConversation(CommandType.Run);
            var       responseMessage = ErrorResponseBuilder.Build(errorMessage);
            ICoreLink coreLink        = GenerateCoreLink(responseMessage);

            var ex = await Assert.ThrowsAsync <RemoteCoreException>(() => coreLink.Request(conv, WaitMs));

            Assert.Equal(errorMessage, ex.Message);
        }
예제 #3
0
        public void GetsAsyncConversationResult()
        {
            var conversation = new CommandConversation(CommandType.Run);

            ResponseMessage responseMessage = StateResponseBuilder.Build(StateType.Running);

            ICoreLink coreLink = GenerateCoreLink(responseMessage);

            Task <StateResponse> futureResponse = coreLink.Request(conversation, WaitMs);

            StateResponse receivedResponse = ReadResponse(futureResponse);

            Assert.Equal(StateType.Running, receivedResponse.State);
        }
예제 #4
0
        public async Task ConnectToCoreAsync(ICoreConnectionParams connectionParams)
        {
            EndPoint endPoint = connectionParams.EndPoint;

            if (CoreProxy != null)
            {
                Log.Error("Cannot connect to core, there is still a core proxy present");
                throw new InvalidOperationException(
                          "There is still a core proxy present");
            }

            if (connectionParams.IsCoreLocal)
            {
                if (m_process == null)
                {
                    await m_charmdRunner.StartIfNotRunningAndWaitAsync(
                        Path.Combine(connectionParams.CoreProcessParams.WorkingDirectory, CharmdRelativePath),
                        CharmdStartWaitMs);

                    // TODO(HonzaS): Move this elsewhere when we have finer local process control.
                    Log.Info("Starting a local core process");
                    m_process = m_coreProcessFactory.Create(connectionParams.CoreProcessParams);
                }

                endPoint = m_process.EndPoint;
            }

            if (endPoint == null)
            {
                Log.Error("Endpoint not set up, cannot connect to core");
                throw new InvalidOperationException("Endpoint not set");
            }

            m_isCoreLocal = connectionParams.IsCoreLocal;

            Log.Info("Connecting to Core running at {hostname:l}:{port}", endPoint.Hostname, endPoint.Port);
            ICoreLink coreLink = m_coreLinkFactory.Create(endPoint);
            // TODO(HonzaS): Check if the endpoint exists (handshake), await the response.


            // TODO(HonzaS): Move these inside the factory method.
            ICoreController coreController = m_coreControllerFactory.Create(coreLink);
            IModelUpdater   modelUpdater   = m_modelUpdaterFactory.Create(coreLink, coreController);

            CoreProxy = m_coreProxyFactory.Create(coreController, modelUpdater);

            RegisterCoreEvents();
        }
예제 #5
0
 public ModelUpdater(ICoreLink coreLink, ICoreController coreController, IModelDiffApplier modelDiffApplier)
 {
     m_coreLink         = coreLink;
     m_coreController   = coreController;
     m_modelDiffApplier = modelDiffApplier;
 }
예제 #6
0
 public CoreController(ICoreLink coreLink, int keepaliveIntervalMs = DefaultKeepaliveIntervalMs)
 {
     m_coreLink                = coreLink;
     m_keepaliveIntervalMs     = keepaliveIntervalMs;
     m_cancellationTokenSource = new CancellationTokenSource();
 }
 public ICoreController Create(ICoreLink coreLink)
 {
     return(InjectProperties(new CoreController(coreLink)));
 }
예제 #8
0
 public IModelUpdater Create(ICoreLink coreLink, ICoreController coreController)
 {
     //return InjectProperties(new ModelUpdater(coreLink, coreController, m_modelDiffApplier));
     return(InjectProperties(new LockingModelUpdater(coreLink, coreController, m_modelDiffApplier)));
 }