| import 'package:fxtest/fxtest.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| group('reads package repository information correctly', () { |
| test('parsing package-repositories.json', () { |
| List<dynamic> manifestTestJson = [ |
| { |
| 'blobs': 'amber-files/repository/blobs', |
| 'path': 'amber-files/repository', |
| 'targets': 'amber-files/repository/targets.json' |
| } |
| ]; |
| PackageRepository repository = |
| PackageRepository.fromJson(manifestTestJson); |
| expect(repository.targetsFile, 'amber-files/repository/targets.json'); |
| expect(repository.blobsDirectory, 'amber-files/repository/blobs'); |
| expect(repository.rootPath, 'amber-files/repository'); |
| }); |
| |
| test( |
| 'refuse to parse a package-repositories.json with multiple repositories', |
| () { |
| List<dynamic> manifestTestJson = [ |
| { |
| 'blobs': 'amber-files/repository/blobs', |
| 'path': 'amber-files/repository', |
| 'targets': 'amber-files/repository/targets.json' |
| }, |
| { |
| 'blobs': 'amber-files2/repository/blobs', |
| 'path': 'amber-files2/repository', |
| 'targets': 'amber-files2/repository/targets.json' |
| } |
| ]; |
| expect(() => PackageRepository.fromJson(manifestTestJson), |
| throwsA(TypeMatcher<PackageRepositoryException>())); |
| }); |
| |
| test('parsing targets.json', () async { |
| // This is adapted from an actual targets.json, intentially keeping the unused |
| // fields to ensure they don't impact parsing. |
| Map<String, dynamic> targetsJson = { |
| 'signatures': [ |
| { |
| 'keyid': |
| 'ffffffffff69aa5eb30d6c4be6b9170737813be937206345c4b2e19ffffffffff', |
| 'method': 'ed25519', |
| 'sig': |
| 'ffffffffffbbbec5c8840dd15f0fba8fdda835e98bbcb91db7a6ffff95ea3f03f5697b654c8133ec86045bb21f8f907c959de494ea11319bec5f90ffffffffff' |
| } |
| ], |
| 'signed': { |
| '_type': 'targets', |
| 'expires': '2020-08-13T00:19:56Z', |
| 'spec_version': '1.0', |
| 'targets': { |
| 'my-demo/0': { |
| 'custom': { |
| 'merkle': |
| '913cdd63ab4aa794694448450505efaa2a8fe27fb33888e5156da9db60ac0a29', |
| 'size': 16384 |
| }, |
| 'hashes': { |
| 'sha512': |
| '2a5294cc86c41df4651e9168ea8d526edd732fa4e7e329abfe5070228b61319c66f56902517d4a1edf5293e21523f669ff0211f51f3e696c4deb3d678edb7f00' |
| }, |
| 'length': 16384 |
| }, |
| 'my_lib/0': { |
| 'custom': { |
| 'merkle': |
| '7a604498e05fa012391b6b51da9cc74ff6a6a9d25b1376de98125c194232bfa1', |
| 'size': 61440 |
| }, |
| 'hashes': { |
| 'sha512': |
| '93430eb8b66cc507d3c36f4a15fc5d7ba3e25d0a1569dddad46355762386a606e90798ec429d35b3defc2df7a67408fa8e4e253d04042624c18e7ce22659a314' |
| }, |
| 'length': 61440 |
| } |
| } |
| } |
| }; |
| PackageRepository repository = PackageRepository('does', 'not', 'matter'); |
| await repository.loadTargetsFromJson(Stream.value(targetsJson)); |
| |
| expect(repository.asMap().length, 2); |
| expect(repository['my-demo']?.merkle, |
| '913cdd63ab4aa794694448450505efaa2a8fe27fb33888e5156da9db60ac0a29'); |
| expect(repository['my_lib']?.merkle, |
| '7a604498e05fa012391b6b51da9cc74ff6a6a9d25b1376de98125c194232bfa1'); |
| }); |
| |
| test('parsing targets.json with multiple versions of the same package name', |
| () async { |
| Map<String, dynamic> targetsJson = { |
| 'signed': { |
| 'targets': { |
| 'my-demo/0': { |
| 'custom': { |
| 'merkle': |
| '913cdd63ab4aa794694448450505efaa2a8fe27fb33888e5156da9db60ac0a29' |
| } |
| }, |
| 'my-demo/1': { |
| 'custom': { |
| 'merkle': |
| '7a604498e05fa012391b6b51da9cc74ff6a6a9d25b1376de98125c194232bfa1' |
| } |
| } |
| } |
| } |
| }; |
| PackageRepository repository = PackageRepository('does', 'not', 'matter'); |
| await repository.loadTargetsFromJson(Stream.value(targetsJson)); |
| |
| expect(repository.asMap().length, 1); |
| expect(repository['my-demo']?['0'], |
| '913cdd63ab4aa794694448450505efaa2a8fe27fb33888e5156da9db60ac0a29'); |
| expect(repository['my-demo']?['1'], |
| '7a604498e05fa012391b6b51da9cc74ff6a6a9d25b1376de98125c194232bfa1'); |
| expect(repository['another-package'], isNull); |
| |
| // merkle getter should throw an exception when there are multiple versions, |
| // since it cannot reliably decide which version to return. |
| expect(() => repository['my-demo']?.merkle, |
| throwsA(TypeMatcher<PackageRepositoryException>())); |
| }); |
| }); |
| } |