private void Exercise(Document document)
        {
            var configuration = McAfeeSection.Configuration();
            var api           = new McAfeeApi(configuration);
            var service       = new McAfeeMalwareService(configuration, api);

            service.Register(document);

            Assert.That(document.ContainsProperty("subId"), Is.True);
            Assert.That(document.ContainsProperty("status"), Is.False);
            Assert.That(document.ContainsProperty("severity"), Is.False);

            Poll(service, document, 120);

            Assert.That(document.ContainsProperty("subId"), Is.True);
            Assert.That(document.ContainsProperty("status"), Is.True);
            Assert.That(document.ContainsProperty("severity"), Is.True);

            var severity = int.Parse(document.GetSeverity());

            Assert.That(document.GetStatus(), Is.EqualTo("5"));
            Assert.That(severity, Is.Not.EqualTo(-2));
            Assert.That(severity, Is.Not.GreaterThan(1));

            api.Dispose();
        }
 public void Should_be_able_to_get_list_of_analyzers()
 {
     using (var api = new McAfeeApi(McAfeeSection.Configuration()))
     {
         var response = api.GetResponse(new RestRequest(api.GetFullApiUrl("vmprofiles.php"))).AsDynamic();
     }
 }
        public void Should_be_able_to_load_the_configuration()
        {
            var path    = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".config\\McAfee.config");
            var section = ConfigurationSectionProvider.OpenFile <McAfeeSection>("shuttle", "mcafee", path);

            Assert.That(section, Is.Not.Null);
            Assert.That(section.Url, Is.EqualTo("api-url"));
            Assert.That(section.Username, Is.EqualTo("api-username"));
            Assert.That(section.Password, Is.EqualTo("api-password"));
            Assert.That(section.SessionDuration, Is.EqualTo("00:00:05"));
            Assert.That(section.AnalyzerProfile, Is.EqualTo("analyzer-profile"));
            Assert.That(section.AcceptableSeverity, Is.EqualTo(3));
            Assert.That(section.HeartbeatInterval, Is.EqualTo("00:00:10"));
            Assert.That(section.PollScanInterval, Is.EqualTo("00:00:15"));

            var configuration = McAfeeSection.Configuration(path);

            Assert.That(configuration.Url, Is.EqualTo("api-url"));
            Assert.That(configuration.Username, Is.EqualTo("api-username"));
            Assert.That(configuration.Password, Is.EqualTo("api-password"));
            Assert.That(configuration.SessionDuration, Is.EqualTo(TimeSpan.FromSeconds(5)));
            Assert.That(configuration.AnalyzerProfile, Is.EqualTo("analyzer-profile"));
            Assert.That(configuration.AcceptableSeverity, Is.EqualTo(3));
            Assert.That(configuration.HeartbeatInterval, Is.EqualTo(TimeSpan.FromSeconds(10)));
            Assert.That(configuration.PollScanInterval, Is.EqualTo(TimeSpan.FromSeconds(15)));
        }
        public void Should_be_able_to_manage_session()
        {
            var sectionConfiguration = McAfeeSection.Configuration();
            var configuration        = new McAfeeConfiguration(sectionConfiguration.Url, sectionConfiguration.Username,
                                                               sectionConfiguration.Password, TimeSpan.FromSeconds(2), "analyzer-profile", 3, TimeSpan.FromSeconds(1),
                                                               TimeSpan.FromSeconds(5));
            var loginCompletedCount     = 0;
            var logoutCompletedCount    = 0;
            var heartbeatCompletedCount = 0;

            using (var api = new McAfeeApi(configuration))
            {
                Assert.That(api.HasSession, Is.False);

                api.LoginCompleted     += (sender, args) => loginCompletedCount++;
                api.LogoutCompleted    += (sender, args) => logoutCompletedCount++;
                api.HeartbeatCompleted += (sender, args) => heartbeatCompletedCount++;

                api.Login();

                Assert.That(loginCompletedCount, Is.EqualTo(1));

                var wait = DateTime.Now.AddSeconds(15);

                while (DateTime.Now < wait)
                {
                    Thread.Sleep(250);

                    if (logoutCompletedCount == loginCompletedCount)
                    {
                        api.Login();
                    }
                }

                Assert.That(heartbeatCompletedCount, Is.GreaterThanOrEqualTo(5));
            }

            Assert.That(loginCompletedCount, Is.GreaterThanOrEqualTo(5));
            Assert.That(logoutCompletedCount, Is.GreaterThanOrEqualTo(5));
        }