@@ -652,7 +652,81 @@ class JSONPackageCollectionProviderTests: XCTestCase {
652
652
let signatureValidator = MockCollectionSignatureValidator ( [ " Sample Package Collection " ] )
653
653
// Collections from www.test.com must be signed
654
654
let sourceCertPolicy = PackageCollectionSourceCertificatePolicy (
655
- sourceCertPolicies: [ " www.test.com " : . init( certPolicyKey: CertificatePolicyKey . default, base64EncodedRootCerts: nil ) ]
655
+ sourceCertPolicies: [ " www.test.com " : [ . init( certPolicyKey: CertificatePolicyKey . default, base64EncodedRootCerts: nil ) ] ]
656
+ )
657
+ let provider = JSONPackageCollectionProvider ( httpClient: httpClient, signatureValidator: signatureValidator,
658
+ sourceCertPolicy: sourceCertPolicy, diagnosticsEngine: DiagnosticsEngine ( ) )
659
+ let source = PackageCollectionsModel . CollectionSource ( type: . json, url: url)
660
+ let collection = try tsc_await { callback in provider. get ( source, callback: callback) }
661
+
662
+ XCTAssertEqual ( collection. name, " Sample Package Collection " )
663
+ XCTAssertEqual ( collection. overview, " This is a sample package collection listing made-up packages. " )
664
+ XCTAssertEqual ( collection. keywords, [ " sample package collection " ] )
665
+ XCTAssertEqual ( collection. createdBy? . name, " Jane Doe " )
666
+ XCTAssertEqual ( collection. packages. count, 2 )
667
+ let package = collection. packages. first!
668
+ XCTAssertEqual ( package . repository, . init( url: " https://www.example.com/repos/RepoOne.git " ) )
669
+ XCTAssertEqual ( package . summary, " Package One " )
670
+ XCTAssertEqual ( package . keywords, [ " sample package " ] )
671
+ XCTAssertEqual ( package . readmeURL, URL ( string: " https://www.example.com/repos/RepoOne/README " ) !)
672
+ XCTAssertEqual ( package . license, . init( type: . Apache2_0, url: URL ( string: " https://www.example.com/repos/RepoOne/LICENSE " ) !) )
673
+ XCTAssertEqual ( package . versions. count, 1 )
674
+ let version = package . versions. first!
675
+ XCTAssertEqual ( version. summary, " Fixed a few bugs " )
676
+ let manifest = version. manifests. values. first!
677
+ XCTAssertEqual ( manifest. packageName, " PackageOne " )
678
+ XCTAssertEqual ( manifest. targets, [ . init( name: " Foo " , moduleName: " Foo " ) ] )
679
+ XCTAssertEqual ( manifest. products, [ . init( name: " Foo " , type: . library( . automatic) , targets: [ . init( name: " Foo " , moduleName: " Foo " ) ] ) ] )
680
+ XCTAssertEqual ( manifest. toolsVersion, ToolsVersion ( string: " 5.1 " ) !)
681
+ XCTAssertEqual ( manifest. minimumPlatformVersions, [ SupportedPlatform ( platform: . macOS, version: . init( " 10.15 " ) ) ] )
682
+ XCTAssertEqual ( version. verifiedCompatibility? . count, 3 )
683
+ XCTAssertEqual ( version. verifiedCompatibility!. first!. platform, . macOS)
684
+ XCTAssertEqual ( version. verifiedCompatibility!. first!. swiftVersion, SwiftLanguageVersion ( string: " 5.1 " ) !)
685
+ XCTAssertEqual ( version. license, . init( type: . Apache2_0, url: URL ( string: " https://www.example.com/repos/RepoOne/LICENSE " ) !) )
686
+ XCTAssertNotNil ( version. createdAt)
687
+ XCTAssertTrue ( collection. isSigned)
688
+ let signature = collection. signature!
689
+ XCTAssertTrue ( signature. isVerified)
690
+ XCTAssertEqual ( " Sample Subject " , signature. certificate. subject. commonName)
691
+ XCTAssertEqual ( " Sample Issuer " , signature. certificate. issuer. commonName)
692
+ }
693
+ }
694
+
695
+ func testRequiredSigningMultiplePoliciesGood( ) throws {
696
+ fixture ( name: " Collections " ) { directoryPath in
697
+ let path = directoryPath. appending ( components: " JSON " , " good_signed.json " )
698
+ let url = URL ( string: " https://www.test.com/collection.json " ) !
699
+ let data = Data ( try localFileSystem. readFileContents ( path) . contents)
700
+
701
+ let handler : HTTPClient . Handler = { request, _, completion in
702
+ XCTAssertEqual ( request. url, url, " url should match " )
703
+ switch request. method {
704
+ case . head:
705
+ completion ( . success( . init( statusCode: 200 ,
706
+ headers: . init( [ . init( name: " Content-Length " , value: " \( data. count) " ) ] ) ) ) )
707
+ case . get:
708
+ completion ( . success( . init( statusCode: 200 ,
709
+ headers: . init( [ . init( name: " Content-Length " , value: " \( data. count) " ) ] ) ,
710
+ body: data) ) )
711
+ default :
712
+ XCTFail ( " method should match " )
713
+ }
714
+ }
715
+
716
+ var httpClient = HTTPClient ( handler: handler)
717
+ httpClient. configuration. circuitBreakerStrategy = . none
718
+ httpClient. configuration. retryStrategy = . none
719
+
720
+ // Mark collection as having valid signature
721
+ let signatureValidator = MockCollectionSignatureValidator ( certPolicyKeys: [ CertificatePolicyKey . default ( subjectUserID: " test " ) ] )
722
+ // Collections from www.test.com must be signed
723
+ let sourceCertPolicy = PackageCollectionSourceCertificatePolicy (
724
+ sourceCertPolicies: [
725
+ " www.test.com " : [
726
+ . init( certPolicyKey: CertificatePolicyKey . default, base64EncodedRootCerts: nil ) ,
727
+ . init( certPolicyKey: CertificatePolicyKey . default ( subjectUserID: " test " ) , base64EncodedRootCerts: nil ) ,
728
+ ] ,
729
+ ]
656
730
)
657
731
let provider = JSONPackageCollectionProvider ( httpClient: httpClient, signatureValidator: signatureValidator,
658
732
sourceCertPolicy: sourceCertPolicy, diagnosticsEngine: DiagnosticsEngine ( ) )
@@ -721,7 +795,7 @@ class JSONPackageCollectionProviderTests: XCTestCase {
721
795
let signatureValidator = MockCollectionSignatureValidator ( )
722
796
// Collections from www.test.com must be signed
723
797
let sourceCertPolicy = PackageCollectionSourceCertificatePolicy (
724
- sourceCertPolicies: [ " www.test.com " : . init( certPolicyKey: CertificatePolicyKey . default, base64EncodedRootCerts: nil ) ]
798
+ sourceCertPolicies: [ " www.test.com " : [ . init( certPolicyKey: CertificatePolicyKey . default, base64EncodedRootCerts: nil ) ] ]
725
799
)
726
800
let provider = JSONPackageCollectionProvider ( httpClient: httpClient, signatureValidator: signatureValidator,
727
801
sourceCertPolicy: sourceCertPolicy, diagnosticsEngine: DiagnosticsEngine ( ) )
0 commit comments