public void TestLoadUnloadServiceProvider()
 {
     var providerLoader = new ServiceProviderLoader();
     providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
     Assert.IsNotNull(providerLoader.Domain);
     Assert.IsNotNull(providerLoader.Provider);
     Assert.IsTrue(providerLoader.Release());
 }
 public void TestReleaseAppDomainWhileThreadIsSleeping()
 {
     var providerLoader = new ServiceProviderLoader();
     providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
     var dummyProvider = (DummyServiceProvider) providerLoader.Provider;
     Action a = dummyProvider.ThreadSleep;
     a.BeginInvoke(null, null);
     Assert.IsTrue(providerLoader.Release());
 }
        public void TestEachLoadCreatesNewAppDomain()
        {
            var providerLoader = new ServiceProviderLoader();
            providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
            var firstDomain = providerLoader.Domain;
            providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
            var secondDomain = providerLoader.Domain;
            Assert.AreNotSame(firstDomain, secondDomain);

            // any method of the application domain would work for the delegate below. What we 're after is
            // the exception that tells us the domain is unloaded.
            Assert.Throws<AppDomainUnloadedException>(() => firstDomain.IsFinalizingForUnload());
        }
        public void TestSocketReceiveReleaseAndRebindInDifferentAppDomain()
        {
            var providerLoader = new ServiceProviderLoader();
            providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
            var dummyProvider = (DummyServiceProvider)providerLoader.Provider;
            Action a = dummyProvider.SocketBlock;
            a.BeginInvoke(null, null);
            Assert.IsTrue(providerLoader.Release());

            providerLoader.Load("ServiceWrapperTests.ClassFixtures.DummyServiceProvider", "ServiceWrapperTests.dll");
            dummyProvider = (DummyServiceProvider)providerLoader.Provider;
            a = dummyProvider.SocketBlock;
            a.BeginInvoke(null, null);
            Assert.IsTrue(providerLoader.Release());
        }
 private void LoadServiceProvider()
 {
     if (ProviderLoader == null) ProviderLoader = new ServiceProviderLoader();
     ProviderLoader.Load(Settings.Default.ServiceProviderName, Settings.Default.ServiceProviderPath);
 }