示例#1
0
        public TestHostContext Setup([CallerMemberName] string name = "")
        {
            // Setup the host context.
            TestHostContext hc = new TestHostContext(this, name);

            // Create a random work path.
            var configStore = new Mock<IConfigurationStore>();
            _workFolder = Path.Combine(
                Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
                $"_work_{Path.GetRandomFileName()}");
            var settings = new AgentSettings()
            {
                WorkFolder = _workFolder,
            };
            configStore.Setup(x => x.GetSettings()).Returns(settings);
            hc.SetSingleton<IConfigurationStore>(configStore.Object);

            // Setup the execution context.
            _ec = new Mock<IExecutionContext>();
            List<string> warnings;
            _variables = new Variables(hc, new Dictionary<string, string>(), new List<MaskHint>(), out warnings);
            _variables.Set(Constants.Variables.System.CollectionId, CollectionId);
            _variables.Set(WellKnownDistributedTaskVariables.TFCollectionUrl, CollectionUrl);
            _variables.Set(Constants.Variables.System.DefinitionId, DefinitionId);
            _variables.Set(Constants.Variables.Build.DefinitionName, DefinitionName);
            _ec.Setup(x => x.Variables).Returns(_variables);

            // Setup the endpoint.
            _endpoint = new ServiceEndpoint() { Url = new Uri(EndpointUrl) };

            // Setup the tracking manager.
            _trackingManager = new TrackingManager();
            _trackingManager.Initialize(hc);

            return hc;
        }
示例#2
0
        public string GetDirectory(WellKnownDirectory directory)
        {
            string path;

            switch (directory)
            {
            case WellKnownDirectory.Bin:
                path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                break;

            case WellKnownDirectory.Diag:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Root),
                    Constants.Path.DiagDirectory);
                break;

            case WellKnownDirectory.Externals:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Root),
                    Constants.Path.ExternalsDirectory);
                break;

            case WellKnownDirectory.LegacyPSHost:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Externals),
                    Constants.Path.LegacyPSHostDirectory);
                break;

            case WellKnownDirectory.Root:
                path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
                break;

            case WellKnownDirectory.ServerOM:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Externals),
                    Constants.Path.ServerOMDirectory);
                break;

            case WellKnownDirectory.Tf:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Externals),
                    Constants.Path.TfDirectory);
                break;

            case WellKnownDirectory.Tee:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Externals),
                    Constants.Path.TeeDirectory);
                break;

            case WellKnownDirectory.Temp:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Work),
                    Constants.Path.TempDirectory);
                break;

            case WellKnownDirectory.Tasks:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Work),
                    Constants.Path.TasksDirectory);
                break;

            case WellKnownDirectory.TaskZips:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Work),
                    Constants.Path.TaskZipsDirectory);
                break;

            case WellKnownDirectory.Tools:
                path = Environment.GetEnvironmentVariable("AGENT_TOOLSDIRECTORY") ?? Environment.GetEnvironmentVariable(Constants.Variables.Agent.ToolsDirectory);
                if (string.IsNullOrEmpty(path))
                {
                    path = Path.Combine(
                        GetDirectory(WellKnownDirectory.Work),
                        Constants.Path.ToolDirectory);
                }
                break;

            case WellKnownDirectory.Update:
                path = Path.Combine(
                    GetDirectory(WellKnownDirectory.Work),
                    Constants.Path.UpdateDirectory);
                break;

            case WellKnownDirectory.Work:
                var           configurationStore = GetService <IConfigurationStore>();
                AgentSettings settings           = configurationStore.GetSettings();
                ArgUtil.NotNull(settings, nameof(settings));
                ArgUtil.NotNullOrEmpty(settings.WorkFolder, nameof(settings.WorkFolder));
                path = Path.GetFullPath(Path.Combine(
                                            GetDirectory(WellKnownDirectory.Root),
                                            settings.WorkFolder));
                break;

            default:
                throw new NotSupportedException($"Unexpected well known directory: '{directory}'");
            }

            _trace.Info($"Well known directory '{directory}': '{path}'");
            return(path);
        }
 public void SaveSettings(AgentSettings settings)
 {
     IOUtil.SaveObject(settings, _configFilePath);
     Trace.Info("Settings Saved.");
     File.SetAttributes(_configFilePath, File.GetAttributes(_configFilePath) | FileAttributes.Hidden);
 }
 public void SaveSettings(AgentSettings settings)
 {
     IOUtil.SaveObject(settings, _configFilePath);
     Trace.Info("Settings Saved.");
     File.SetAttributes(_configFilePath, File.GetAttributes(_configFilePath) | FileAttributes.Hidden);
 }
        public AgentSettings GetSettings()
        {
            if (_settings == null)
            {
                _settings = IOUtil.LoadObject<AgentSettings>(_configFilePath);
            }

            return _settings;
        }
示例#6
0
 public void SaveSettings(AgentSettings settings)
 {
     IOUtil.SaveObject(settings, _configFilePath);
     Trace.Info("Settings Saved.");
 }
        // TODO: Updates legacy config.

        private TestHostContext Setup(
            [CallerMemberName] string name = "",
            BuildCleanOption? cleanOption = null,
            ExistingConfigKind existingConfigKind = ExistingConfigKind.None)
        {
            // Setup the host context.
            TestHostContext hc = new TestHostContext(this, name);

            // Create a random work path.
            var configStore = new Mock<IConfigurationStore>();
            _workFolder = Path.Combine(
                Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
                $"_work_{Path.GetRandomFileName()}");
            var settings = new AgentSettings() { WorkFolder = _workFolder };
            configStore.Setup(x => x.GetSettings()).Returns(settings);
            hc.SetSingleton<IConfigurationStore>(configStore.Object);

            // Setup the execution context.
            _ec = new Mock<IExecutionContext>();
            List<string> warnings;
            _variables = new Variables(hc, new Dictionary<string, string>(), new List<MaskHint>(), out warnings);
            _variables.Set(Constants.Variables.System.CollectionId, CollectionId);
            _variables.Set(Constants.Variables.System.DefinitionId, DefinitionId);
            _variables.Set(Constants.Variables.Build.Clean, $"{cleanOption}");
            _ec.Setup(x => x.Variables).Returns(_variables);

            // Store the expected tracking file path.
            _trackingFile = Path.Combine(
                _workFolder,
                Constants.Build.Path.SourceRootMappingDirectory,
                _ec.Object.Variables.System_CollectionId,
                _ec.Object.Variables.System_DefinitionId,
                Constants.Build.Path.TrackingConfigFile);

            // Setup the endpoint.
            _endpoint = new ServiceEndpoint()
            {
                Name = "Some endpoint name",
                Url = new Uri("http://contoso.visualstudio.com"),
            };

            // Setup the source provider.
            _sourceProvider = new Mock<ISourceProvider>();
            _sourceProvider
                .Setup(x => x.GetBuildDirectoryHashKey(_ec.Object, _endpoint))
                .Returns(HashKey);
            hc.SetSingleton<ISourceProvider>(_sourceProvider.Object);

            // Store the existing config object.
            switch (existingConfigKind)
            {
                case ExistingConfigKind.Matching:
                    _existingConfig = new TrackingConfig(_ec.Object, _endpoint, 1, HashKey);
                    Assert.Equal("1", _existingConfig.BuildDirectory);
                    break;
                case ExistingConfigKind.Nonmatching:
                    _existingConfig = new TrackingConfig(_ec.Object, _endpoint, 2, NonmatchingHashKey);
                    Assert.Equal("2", _existingConfig.BuildDirectory);
                    break;
                case ExistingConfigKind.None:
                    break;
                default:
                    throw new NotSupportedException();
            }

            // Store the new config object.
            if (existingConfigKind == ExistingConfigKind.Matching)
            {
                _newConfig = _existingConfig;
            }
            else
            {
                _newConfig = new TrackingConfig(_ec.Object, _endpoint, 3, HashKey);
                Assert.Equal("3", _newConfig.BuildDirectory);
            }

            // Setup the tracking manager.
            _trackingManager = new Mock<ITrackingManager>();
            _trackingManager
                .Setup(x => x.LoadIfExists(_ec.Object, _trackingFile))
                .Returns(_existingConfig);
            if (existingConfigKind == ExistingConfigKind.None || existingConfigKind == ExistingConfigKind.Nonmatching)
            {
                _trackingManager
                    .Setup(x => x.Create(_ec.Object, _endpoint, HashKey, _trackingFile))
                    .Returns(_newConfig);
                if (existingConfigKind == ExistingConfigKind.Nonmatching)
                {
                    _trackingManager
                        .Setup(x => x.MarkForGarbageCollection(_ec.Object, _existingConfig));
                }
            }
            else if (existingConfigKind == ExistingConfigKind.Matching)
            {
                _trackingManager
                    .Setup(x => x.UpdateJobRunProperties(_ec.Object, _existingConfig, _trackingFile));
            }
            else
            {
                throw new NotSupportedException();
            }

            hc.SetSingleton<ITrackingManager>(_trackingManager.Object);

            // Setup the build directory manager.
            _buildDirectoryManager = new BuildDirectoryManager();
            _buildDirectoryManager.Initialize(hc);
            return hc;
        }