blob: 87e97b07b98c180e69ec792fea98c24a1128731a [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:fidl/fidl.dart';
import 'package:fidl_fuchsia_ledger/fidl.dart' as ledger;
import 'package:fidl_fuchsia_sys/fidl_async.dart' show LaunchInfo, ComponentControllerProxy;
import 'package:lib.app.dart/app_async.dart' show Services, StartupContext;
import 'package:sledge/sledge.dart';
import 'package:test/test.dart';
class _LedgerTestInstance {
_LedgerTestInstance(this._componentControllerProxy);
InterfaceHandle<ledger.Ledger> ledgerHandle;
// ignore: unused_field
ComponentControllerProxy _componentControllerProxy;
}
/// Returns a new in-memory Ledger handle.
Future<_LedgerTestInstance> getInMemoryLedgerTestInstance() async {
String server =
'fuchsia-pkg://fuchsia.com/ledger_test_instance_provider#meta/ledger_test_instance_provider.cmx';
final Services services = new Services();
final LaunchInfo launchInfo =
new LaunchInfo(url: server, directoryRequest: services.request());
final context = new StartupContext.fromStartupInfo();
final ComponentControllerProxy controller = new ComponentControllerProxy();
await context.launcher.createComponent(launchInfo, controller.ctrl.request());
final ledgerTestInstance = new _LedgerTestInstance(controller)
..ledgerHandle = await services.connectToServiceByName<ledger.Ledger>(ledger.Ledger.$serviceName);
return ledgerTestInstance;
}
Completer<_LedgerTestInstance> _ledgerTestInstance;
/// Creates a new test Sledge instance backed by an in-memory Ledger.
Future<Sledge> getTestSledge() async {
if (_ledgerTestInstance == null) {
// If the completer has never been created, create it and start the process
// of obtaining a LedgerTestInstance.
_ledgerTestInstance = new Completer();
final futureLedgerTestInstance = getInMemoryLedgerTestInstance();
_ledgerTestInstance.complete(await futureLedgerTestInstance);
}
final ledgerTestInstance = await _ledgerTestInstance.future;
final sledge = new Sledge.fromLedgerHandle(ledgerTestInstance.ledgerHandle);
return sledge;
}
void main() {
test('Save a document', () async {
final sledge = await getTestSledge();
Map<String, BaseType> schemaDescription = <String, BaseType>{
'someInteger': new Integer()
};
Schema schema = new Schema(schemaDescription);
DocumentId id = new DocumentId(schema);
// Store a document in Sledge.
await sledge.runInTransaction(() async {
final List<Document> documents =
await sledge.getDocuments(new Query(schema));
assert(documents.isEmpty);
assert(await sledge.documentExists(id) == false);
Document doc = await sledge.getDocument(id);
assert(doc['someInteger'].value == 0);
doc['someInteger'].value = 42;
assert(doc['someInteger'].value == 42);
});
});
}