//        [Test]
        public void TestLifecycle()
        {
            TestHelpers.InMethod();
            TestHelpers.EnableLogging();

            UUID estateOwnerId = TestHelpers.ParseTail(0x1);
            UUID regionId = TestHelpers.ParseTail(0x10);

            IConfigSource configSource = new IniConfigSource();
            configSource.AddConfig("Startup");
            configSource.AddConfig("Modules");

//            // We use this to skip estate questions
            // Turns out not to be needed is estate owner id is pre-set in region information.
//            IConfig estateConfig = configSource.AddConfig(OpenSimBase.ESTATE_SECTION_NAME);
//            estateConfig.Set("DefaultEstateOwnerName", "Zaphod Beeblebrox");
//            estateConfig.Set("DefaultEstateOwnerUUID", estateOwnerId);
//            estateConfig.Set("DefaultEstateOwnerEMail", "*****@*****.**");
//            estateConfig.Set("DefaultEstateOwnerPassword", "two heads");

            // For grid servic
            configSource.AddConfig("GridService");
            configSource.Configs["Modules"].Set("GridServices", "LocalGridServicesConnector");
            configSource.Configs["GridService"].Set("StorageProvider", "OpenSim.Data.Null.dll:NullRegionData");
            configSource.Configs["GridService"].Set("LocalServiceModule", "OpenSim.Services.GridService.dll:GridService");
            configSource.Configs["GridService"].Set("ConnectionString", "!static");

            LocalGridServicesConnector gridService = new LocalGridServicesConnector();
//
            OpenSim sim = new OpenSim(configSource);

            sim.SuppressExit = true;
            sim.EnableInitialPluginLoad = false;
            sim.LoadEstateDataService = false;
            sim.NetServersInfo.HttpListenerPort = 0;

            IRegistryCore reg = sim.ApplicationRegistry;

            RegionInfo ri = new RegionInfo();
            ri.RegionID = regionId;
            ri.EstateSettings.EstateOwner = estateOwnerId;
            ri.InternalEndPoint = new IPEndPoint(0, 0);

            MockRegionModulesControllerPlugin rmcp = new MockRegionModulesControllerPlugin();
            sim.m_plugins = new List<IApplicationPlugin>() { rmcp };
            reg.RegisterInterface<IRegionModulesController>(rmcp);

            // XXX: Have to initialize directly for now
            rmcp.Initialise(sim);

            rmcp.AddNode(gridService);

            TestSharedRegion tsr = new TestSharedRegion();
            rmcp.AddNode(tsr);

            // FIXME: Want to use the real one eventually but this is currently directly tied into Mono.Addins
            // which has been written in such a way that makes it impossible to use for regression tests.
//            RegionModulesControllerPlugin rmcp = new RegionModulesControllerPlugin();
//            rmcp.LoadModulesFromAddins = false;
////            reg.RegisterInterface<IRegionModulesController>(rmcp);
//            rmcp.Initialise(sim);
//            rmcp.PostInitialise();           
//            TypeExtensionNode node = new TypeExtensionNode();
//            node.
//            rmcp.AddNode(node, configSource.Configs["Modules"], new Dictionary<RuntimeAddin, IList<int>>());

            sim.Startup();
            IScene scene;
            sim.CreateRegion(ri, out scene);

            sim.Shutdown();

            List<string> co = tsr.CallOrder;
            int expectedEventCount = 6;

            Assert.AreEqual(
                expectedEventCount, 
                co.Count, 
                "Expected {0} events but only got {1} ({2})", 
                expectedEventCount, co.Count, string.Join(",", co));
            Assert.AreEqual("Initialise",       co[0]);
            Assert.AreEqual("PostInitialise",   co[1]);
            Assert.AreEqual("AddRegion",        co[2]);
            Assert.AreEqual("RegionLoaded",     co[3]);
            Assert.AreEqual("RemoveRegion",     co[4]);
            Assert.AreEqual("Close",            co[5]);
        }