winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

SourceCommand.cs (11559B)


      1 // -----------------------------------------------------------------------------
      2 // <copyright file="SourceCommand.cs" company="Microsoft Corporation">
      3 //     Copyright (c) Microsoft Corporation. Licensed under the MIT License.
      4 // </copyright>
      5 // -----------------------------------------------------------------------------
      6 
      7 namespace AppInstallerCLIE2ETests
      8 {
      9     using AppInstallerCLIE2ETests.Helpers;
     10     using NUnit.Framework;
     11 
     12     /// <summary>
     13     /// Test source command.
     14     /// </summary>
     15     public class SourceCommand : BaseCommand
     16     {
     17         /// <summary>
     18         /// Test set up.
     19         /// </summary>
     20         [SetUp]
     21         public void Setup()
     22         {
     23             this.ResetTestSource(false);
     24         }
     25 
     26         /// <summary>
     27         /// Test source add.
     28         /// </summary>
     29         [Test]
     30         public void SourceAdd()
     31         {
     32             // TODO: Our test source package is being rejected by SmartScreen on the build server.
     33             //       Reenable when SmartScreen issue is solved or removed.
     34             Assert.Ignore();
     35 
     36             var result = TestCommon.RunAICLICommand("source add", $"SourceTest {Constants.TestSourceUrl}");
     37             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
     38             Assert.True(result.StdOut.Contains("Done"));
     39             TestCommon.RunAICLICommand("source remove", $"-n SourceTest");
     40         }
     41 
     42         /// <summary>
     43         /// Test source add with trust level.
     44         /// </summary>
     45         [Test]
     46         public void SourceAddWithTrustLevel()
     47         {
     48             // Remove the test source.
     49             TestCommon.RunAICLICommand("source remove", Constants.TestSourceName);
     50 
     51             var result = TestCommon.RunAICLICommand("source add", $"SourceTest {Constants.TestSourceUrl} --trust-level trusted");
     52             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
     53             Assert.True(result.StdOut.Contains("Done"));
     54 
     55             var listResult = TestCommon.RunAICLICommand("source list", $"-n SourceTest");
     56             Assert.AreEqual(Constants.ErrorCode.S_OK, listResult.ExitCode);
     57             Assert.True(listResult.StdOut.Contains("Trust Level"));
     58             Assert.True(listResult.StdOut.Contains("Trusted"));
     59             TestCommon.RunAICLICommand("source remove", $"-n SourceTest");
     60         }
     61 
     62         /// <summary>
     63         /// Test source add with store origin trust level.
     64         /// </summary>
     65         [Test]
     66         public void SourceAddWithStoreOriginTrustLevel()
     67         {
     68             // Remove the test source.
     69             TestCommon.RunAICLICommand("source remove", Constants.TestSourceName);
     70 
     71             var result = TestCommon.RunAICLICommand("source add", $"SourceTest {Constants.TestSourceUrl} --trust-level storeOrigin");
     72             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_DATA_INTEGRITY_FAILURE, result.ExitCode);
     73             Assert.True(result.StdOut.Contains("The source data is corrupted or tampered"));
     74         }
     75 
     76         /// <summary>
     77         /// Test source add with explicit flag. Packages should only appear if the source is explicitly declared.
     78         /// </summary>
     79         [Test]
     80         public void SourceAddWithExplicit()
     81         {
     82             // Remove the test source.
     83             TestCommon.RunAICLICommand("source remove", Constants.TestSourceName);
     84 
     85             var result = TestCommon.RunAICLICommand("source add", $"SourceTest {Constants.TestSourceUrl} --trust-level trusted --explicit");
     86             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
     87             Assert.True(result.StdOut.Contains("Done"));
     88 
     89             var searchResult = TestCommon.RunAICLICommand("search", "TestExampleInstaller");
     90             Assert.AreEqual(Constants.ErrorCode.ERROR_NO_SOURCES_DEFINED, searchResult.ExitCode);
     91             Assert.True(searchResult.StdOut.Contains("No sources defined; add one with 'source add' or reset to defaults with 'source reset'"));
     92 
     93             var searchResult2 = TestCommon.RunAICLICommand("search", "TestExampleInstaller --source SourceTest");
     94             Assert.AreEqual(Constants.ErrorCode.S_OK, searchResult2.ExitCode);
     95             Assert.True(searchResult2.StdOut.Contains("TestExampleInstaller"));
     96             Assert.True(searchResult2.StdOut.Contains("AppInstallerTest.TestExampleInstaller"));
     97             TestCommon.RunAICLICommand("source remove", $"-n SourceTest");
     98         }
     99 
    100         /// <summary>
    101         /// Test source add with duplicate name.
    102         /// </summary>
    103         [Test]
    104         public void SourceAddWithDuplicateName()
    105         {
    106             // Add source with duplicate name should fail
    107             var result = TestCommon.RunAICLICommand("source add", $"{Constants.TestSourceName} https://microsoft.com");
    108             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_NAME_ALREADY_EXISTS, result.ExitCode);
    109             Assert.True(result.StdOut.Contains("A source with the given name already exists and refers to a different location"));
    110         }
    111 
    112         /// <summary>
    113         /// Test source add with duplicate source url.
    114         /// </summary>
    115         [Test]
    116         public void SourceAddWithDuplicateSourceUrl()
    117         {
    118             // Add source with duplicate url should fail
    119             var result = TestCommon.RunAICLICommand("source add", $"TestSource2 {Constants.TestSourceUrl}");
    120             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_ARG_ALREADY_EXISTS, result.ExitCode);
    121             Assert.True(result.StdOut.Contains("A source with a different name already refers to this location"));
    122         }
    123 
    124         /// <summary>
    125         /// Test source add with invalid url.
    126         /// </summary>
    127         [Test]
    128         public void SourceAddWithInvalidURL()
    129         {
    130             // Add source with invalid url should fail
    131             var result = TestCommon.RunAICLICommand("source add", $"AnotherSource {Constants.TestSourceUrl}/Invalid/Directory/Dont/Add/Me");
    132             Assert.AreEqual(Constants.ErrorCode.HTTP_E_STATUS_NOT_FOUND, result.ExitCode);
    133             Assert.True(result.StdOut.Contains("An unexpected error occurred while executing the command"));
    134         }
    135 
    136         /// <summary>
    137         /// Test source add with http url.
    138         /// </summary>
    139         [Test]
    140         public void SourceAddWithHttpURL()
    141         {
    142             // Add source with an HTTP url should fail
    143             var result = TestCommon.RunAICLICommand("source add", "Insecure http://microsoft.com");
    144             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_NOT_SECURE, result.ExitCode);
    145             Assert.True(result.StdOut.Contains("error occurred while executing the command"));
    146         }
    147 
    148         /// <summary>
    149         /// Test source list with no args.
    150         /// </summary>
    151         [Test]
    152         public void SourceListWithNoArgs()
    153         {
    154             // List with no args should list all available sources
    155             var result = TestCommon.RunAICLICommand("source list", string.Empty);
    156             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
    157             Assert.True(result.StdOut.Contains(Constants.TestSourceUrl));
    158         }
    159 
    160         /// <summary>
    161         /// Test source list with name.
    162         /// </summary>
    163         [Test]
    164         public void SourceListWithName()
    165         {
    166             var result = TestCommon.RunAICLICommand("source list", $"-n {Constants.TestSourceName}");
    167             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
    168             Assert.True(result.StdOut.Contains(Constants.TestSourceName));
    169             Assert.True(result.StdOut.Contains(Constants.TestSourceUrl));
    170             Assert.True(result.StdOut.Contains("Microsoft.PreIndexed.Package"));
    171             Assert.True(result.StdOut.Contains("Trust Level"));
    172             Assert.True(result.StdOut.Contains("Updated"));
    173         }
    174 
    175         /// <summary>
    176         /// Test source list name mismatch.
    177         /// </summary>
    178         [Test]
    179         public void SourceListNameMismatch()
    180         {
    181             var result = TestCommon.RunAICLICommand("source list", "-n UnknownName");
    182             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_NAME_DOES_NOT_EXIST, result.ExitCode);
    183             Assert.True(result.StdOut.Contains("Did not find a source named"));
    184         }
    185 
    186         /// <summary>
    187         /// Test source update.
    188         /// </summary>
    189         [Test]
    190         public void SourceUpdate()
    191         {
    192             var result = TestCommon.RunAICLICommand("source update", $"-n {Constants.TestSourceName}");
    193             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
    194             Assert.True(result.StdOut.Contains("Done"));
    195         }
    196 
    197         /// <summary>
    198         /// Test source update with invalid name.
    199         /// </summary>
    200         [Test]
    201         public void SourceUpdateWithInvalidName()
    202         {
    203             var result = TestCommon.RunAICLICommand("source update", "-n UnknownName");
    204             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_NAME_DOES_NOT_EXIST, result.ExitCode);
    205             Assert.True(result.StdOut.Contains("Did not find a source named: UnknownName"));
    206         }
    207 
    208         /// <summary>
    209         /// Test source remove by name.
    210         /// </summary>
    211         [Test]
    212         public void SourceRemoveValidName()
    213         {
    214             var result = TestCommon.RunAICLICommand("source remove", $"-n {Constants.TestSourceName}");
    215             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
    216             Assert.True(result.StdOut.Contains("Done"));
    217             this.ResetTestSource(false);
    218         }
    219 
    220         /// <summary>
    221         /// Test source remove with invalid name.
    222         /// </summary>
    223         [Test]
    224         public void SourceRemoveInvalidName()
    225         {
    226             var result = TestCommon.RunAICLICommand("source remove", "-n UnknownName");
    227             Assert.AreEqual(Constants.ErrorCode.ERROR_SOURCE_NAME_DOES_NOT_EXIST, result.ExitCode);
    228             Assert.True(result.StdOut.Contains("Did not find a source named: UnknownName"));
    229         }
    230 
    231         /// <summary>
    232         /// Test source reset.
    233         /// </summary>
    234         [Test]
    235         public void SourceReset()
    236         {
    237             var result = TestCommon.RunAICLICommand("source reset", string.Empty);
    238             Assert.True(result.StdOut.Contains("The following sources will be reset if the --force option is given:"));
    239             Assert.True(result.StdOut.Contains(Constants.TestSourceName));
    240             Assert.True(result.StdOut.Contains(Constants.TestSourceUrl));
    241         }
    242 
    243         /// <summary>
    244         /// Test source reset force.
    245         /// </summary>
    246         [Test]
    247         public void SourceForceReset()
    248         {
    249             // Force Reset Sources
    250             var result = TestCommon.RunAICLICommand("source reset", "--force");
    251             Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode);
    252             Assert.True(result.StdOut.Contains("Resetting all sources...Done"));
    253 
    254             // Verify sources have been reset
    255             result = TestCommon.RunAICLICommand("source list", string.Empty);
    256             Assert.True(result.StdOut.Contains("winget"));
    257             Assert.True(result.StdOut.Contains("https://cdn.winget.microsoft.com/cache"));
    258             Assert.False(result.StdOut.Contains(Constants.TestSourceName));
    259             Assert.False(result.StdOut.Contains(Constants.TestSourceUrl));
    260         }
    261     }
    262 }