private static ICruiseServer CreateLocal(string configFile)
		{
            IProjectStateManager stateManager = new XmlProjectStateManager();
            // Load the extensions configuration
            var configuration = ConfigurationManager.GetSection("cruiseServer") as ServerConfiguration;
            List<ExtensionConfiguration> extensionList = null;
            if (configuration != null) extensionList = configuration.Extensions;

		    PathUtils.ConfigFileLocation = Path.IsPathRooted(configFile)
		                                       ? configFile
		                                       : Path.Combine(Environment.CurrentDirectory, configFile);
			var server = new CruiseServer(
				NewConfigurationService(configFile),
				new ProjectIntegratorListFactory(),
				new NetReflectorProjectSerializer(),
                stateManager,
				new SystemIoFileSystem(), 
				new ExecutionEnvironment(),
                extensionList);

            // Initialise the IoC container.
            server.InitialiseServices();

            return server;
		}
		public void DefaultConstructorSetsPersistanceLocation()
		{
			// This is an indirect test - if the correct location is set, then the FileExists call
			// will be valid
            Expect.Call(executionEnvironment.GetDefaultProgramDataFolder(ApplicationType.Server)).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull()).Return(applicationDataPath);
            Expect.Call(delegate { fileSystem.EnsureFolderExists(applicationDataPath); }).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull());
			Expect.Call(fileSystem.FileExists(persistanceFilePath)).Return(false);
			mocks.ReplayAll();

			stateManager = new XmlProjectStateManager(fileSystem, executionEnvironment);
			stateManager.CheckIfProjectCanStart("Project");
			mocks.VerifyAll();
		}
		public void RecordProjectAsStopped()
		{
			var projectName = "Test Project #1";
			SetupDefaultContent();
			var stream = InitialiseOutputStream();

            Expect.Call(executionEnvironment.GetDefaultProgramDataFolder(ApplicationType.Server)).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull()).Return(applicationDataPath);
            Expect.Call(delegate { fileSystem.EnsureFolderExists(applicationDataPath); }).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull());
			mocks.ReplayAll();

			stateManager = new XmlProjectStateManager(fileSystem, executionEnvironment);
			stateManager.RecordProjectAsStopped(projectName);
			var result = stateManager.CheckIfProjectCanStart(projectName);
			Assert.IsFalse(result, "Project state incorrect");
			mocks.VerifyAll();

			var expectedData = "<state><project>Test Project #3</project><project>Test Project #1</project></state>";
			ValidateStreamData(stream, expectedData);
		}
		public void CheckIfProjectCanStartKnownStartableProjectFromFile()
		{
			var projectName = "Test Project #4";
			SetupDefaultContent();

            Expect.Call(executionEnvironment.GetDefaultProgramDataFolder(ApplicationType.Server)).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull()).Return(applicationDataPath);
            Expect.Call(delegate { fileSystem.EnsureFolderExists(applicationDataPath); }).IgnoreArguments().Constraints(Rhino.Mocks.Constraints.Is.NotNull());
			mocks.ReplayAll();

			stateManager = new XmlProjectStateManager(fileSystem, executionEnvironment);
			var result = stateManager.CheckIfProjectCanStart(projectName);
			Assert.IsTrue(result, "Project state incorrect");
			mocks.VerifyAll();
		}