public void TestConstructor_ThrowsForNullDataSource()
        {
            var e = Assert.ThrowsException <ArgumentNullException>(
                () => _ = new AttachDebuggerFirewallPort(_defaultPortInfo, DefaultDescription, _defaultInstance, null));

            Assert.AreEqual("lazyDataSource", e.ParamName);
        }
        public async Task TestEnablePort_TracksUpdatePortsTask()
        {
            var tcs = new TaskCompletionSource <object>();

            _dataSourceMock.Setup(ds => ds.RefreshInstance(It.IsAny <Instance>()))
            .Returns(Task.FromResult(_defaultInstance));
            _dataSourceMock
            .Setup(
                ds => ds.UpdateInstancePorts(
                    It.IsAny <Instance>(),
                    It.IsAny <IList <FirewallPort> >(),
                    It.IsAny <IList <FirewallPort> >()))
            .Returns(
                new GceOperation(OperationType.ModifyingFirewall, "", "", "")
            {
                OperationTask = tcs.Task
            });

            var objectUnderTest = new AttachDebuggerFirewallPort(
                _defaultPortInfo,
                DefaultDescription,
                _defaultInstance,
                _dataSourceMock.ToLazy());
            Task task = objectUnderTest.EnablePortAsync();

            Assert.IsFalse(task.IsCompleted);

            tcs.SetResult(null);

            await task;
        }
        public async Task TestEnablePort_UpdatesInstancePortsFor()
        {
            _dataSourceMock.Setup(ds => ds.RefreshInstance(It.IsAny <Instance>()))
            .Returns(Task.FromResult(_expectedInstance));
            _dataSourceMock.Setup(
                ds => ds.UpdateInstancePorts(
                    _expectedInstance,
                    It.Is <IList <FirewallPort> >(
                        toEnable => toEnable.Single().Port == _expectedPortInfo.Port &&
                        toEnable.Single().Name == _expectedPortInfo.GetTag(ExpectedInstanceName)),
                    It.Is <IList <FirewallPort> >(l => l.Count == 0)))
            .Returns(new GceOperation(OperationType.ModifyingFirewall, "", "", "")
            {
                OperationTask = Task.CompletedTask
            })
            .Verifiable();

            var objectUnderTest = new AttachDebuggerFirewallPort(
                _expectedPortInfo,
                DefaultDescription,
                _defaultInstance,
                _dataSourceMock.ToLazy());
            await objectUnderTest.EnablePortAsync();

            _dataSourceMock.Verify();
        }
        public void TestConstructor_SetsPortInfo()
        {
            var objectUnderTest = new AttachDebuggerFirewallPort(
                _expectedPortInfo,
                DefaultDescription,
                _defaultInstance,
                _dataSourceMock.ToLazy());

            Assert.AreEqual(_expectedPortInfo, objectUnderTest.PortInfo);
        }
        public void TestConstructor_ThrowsForNullDescription()
        {
            var e = Assert.ThrowsException <ArgumentException>(
                () => _ = new AttachDebuggerFirewallPort(
                    _defaultPortInfo,
                    null,
                    _defaultInstance,
                    _dataSourceMock.ToLazy()));

            Assert.AreEqual("description", e.Message);
        }
        public void TestConstructor_ThrowsForNullPortInfo()
        {
            var e = Assert.ThrowsException <ArgumentNullException>(
                () => _ = new AttachDebuggerFirewallPort(
                    null,
                    DefaultDescription,
                    _defaultInstance,
                    _dataSourceMock.ToLazy()));

            Assert.AreEqual("portInfo", e.ParamName);
        }
        public void TestConstructor_SetsDescription()
        {
            const string expectedDescription = "Expected Description";
            var          objectUnderTest     = new AttachDebuggerFirewallPort(
                _defaultPortInfo,
                expectedDescription,
                _defaultInstance,
                _dataSourceMock.ToLazy());

            Assert.AreEqual(expectedDescription, objectUnderTest.Description);
        }
        public async Task TestIsPortEnabled_ShortCircutFalse()
        {
            _expectedInstance.Tags = new Tags {
                Items = new List <string>()
            };
            var objectUnderTests = new AttachDebuggerFirewallPort(
                _expectedPortInfo,
                DefaultDescription,
                _expectedInstance,
                _dataSourceMock.ToLazy());

            bool result = await objectUnderTests.IsPortEnabledAsync();

            Assert.IsFalse(result);
        }
        public async Task TestIsPortEnabled_False()
        {
            _dataSourceMock.Setup(ds => ds.GetFirewallListAsync())
            .Returns(Task.FromResult <IList <Firewall> >(new List <Firewall>()));
            _expectedInstance.Tags =
                new Tags {
                Items = new List <string> {
                    _expectedPortInfo.GetTag(ExpectedInstanceName)
                }
            };
            var objectUnderTests = new AttachDebuggerFirewallPort(
                _expectedPortInfo,
                DefaultDescription,
                _expectedInstance,
                _dataSourceMock.ToLazy());

            bool result = await objectUnderTests.IsPortEnabledAsync();

            Assert.IsFalse(result);
        }
        public async Task TestIsPortEnabled_True()
        {
            string targetTag = _expectedPortInfo.GetTag(ExpectedInstanceName);

            _dataSourceMock.Setup(ds => ds.GetFirewallListAsync())
            .Returns(
                Task.FromResult <IList <Firewall> >(
                    new List <Firewall>
            {
                new Firewall
                {
                    TargetTags = new List <string> {
                        targetTag
                    },
                    Allowed = new List <Firewall.AllowedData>
                    {
                        new Firewall.AllowedData
                        {
                            IPProtocol = "tcp",
                            Ports      = new List <string> {
                                _expectedPortInfo.Port.ToString()
                            }
                        }
                    }
                }
            }));
            var objectUnderTests = new AttachDebuggerFirewallPort(
                _expectedPortInfo,
                DefaultDescription,
                PortTestHelpers.GetInstanceWithEnabledPort(_expectedPortInfo, ExpectedInstanceName),
                _dataSourceMock.ToLazy());

            bool result = await objectUnderTests.IsPortEnabledAsync();

            Assert.IsTrue(result);
        }