public void OpenServiceSetsConnectionHandleToNotIntPtrZero(Fake<IAdvApi32> advApi32, int serviceControlManagerHandleValue,
            int serviceHandleValue, string serviceName)
        {
            advApi32.CallsTo(_ => _.OpenService(A<IntPtr>._, A<string>._, A<ScmAccess>._))
                    .Returns(new IntPtr(serviceHandleValue));

            var sut = new ServiceConnection(advApi32.FakedObject);

            var connectionHandle = new ConnectionHandle {ServiceManagerHandle = new IntPtr(serviceControlManagerHandleValue)};

            sut.Open(connectionHandle, serviceName);

            var actual = connectionHandle.ServiceHandle;

            var expected = new IntPtr(serviceHandleValue);

            Assert.Equal(expected, actual);
        }
        public void OpenServiceRequiresServiceName(Fake<IAdvApi32> advApi32, int serviceControlManagerHandleValue)
        {
            var sut = new ServiceConnection(advApi32.FakedObject);

            var connectionHandle = new ConnectionHandle {ServiceManagerHandle = new IntPtr(serviceControlManagerHandleValue)};

            Assert.Throws<ArgumentNullException>(() => sut.Open(connectionHandle, null));
        }
        public void OpenServiceRequiresConnectionHandle(Fake<IAdvApi32> advApi32, string serviceName)
        {
            var sut = new ServiceConnection(advApi32.FakedObject);

            Assert.Throws<ArgumentNullException>(() => sut.Open(null, serviceName));
        }
        public void OpenServiceRequiresOpenServiceControlManager(Fake<IAdvApi32> advApi32, string serviceName)
        {
            var sut = new ServiceConnection(advApi32.FakedObject);

            var connectionHandle = new ConnectionHandle();

            Assert.Throws<MissingServiceManagerConnectionException>(() => sut.Open(connectionHandle, serviceName));
        }
        public void OpenServiceCallsUnderlyingApi(Fake<IAdvApi32> advApi32, int serviceControlManagerHandleValue, int serviceHandleValue,
            string serviceName)
        {
            advApi32.CallsTo(_ => _.OpenService(A<IntPtr>._, A<string>._, A<ScmAccess>._))
                    .Returns(new IntPtr(serviceHandleValue));

            var sut = new ServiceConnection(advApi32.FakedObject);

            var connectionHandle = new ConnectionHandle {ServiceManagerHandle = new IntPtr(serviceControlManagerHandleValue)};

            sut.Open(connectionHandle, serviceName);

            advApi32.CallsTo(_ => _.OpenService(A<IntPtr>._, A<string>._, A<ScmAccess>._)).MustHaveHappened();
        }