59 lines
2.4 KiB
Dart
59 lines
2.4 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:integration_test/integration_test.dart';
|
|
import 'package:jj_mkvmaker/services/secret_store.dart';
|
|
import 'support/temp_dir.dart';
|
|
|
|
/// 54: 이 기기의 안전 저장소 (Windows DPAPI · Android Keystore) 에 실제로 쓰고 읽고 지운다.
|
|
/// 시험용 열쇠 하나만 쓰고 끝에 지운다 (사용자가 저장한 값은 건드리지 않음).
|
|
/// Windows 는 임시 폴더의 secrets.dat 만 쓴다 (관리자 지시 10/17 - 사용자의 앱 데이터 폴더 secrets.dat 는 건드리지 않음,
|
|
/// 같은 시험이 보통 회귀에도 있음: test/secret_store_dpapi_test.dart). Android 는 기기의 Keystore 를 써야 하므로 그대로.
|
|
void main() {
|
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
Directory? tmp;
|
|
SecretStore store() {
|
|
if (!Platform.isWindows) return SecretStore.platform();
|
|
return SecretStore.dpapiAt((tmp ??= testTempDir('jj_secretit_')).path);
|
|
}
|
|
|
|
tearDownAll(() {
|
|
try {
|
|
tmp?.deleteSync(recursive: true);
|
|
} catch (_) {}
|
|
});
|
|
|
|
testWidgets('안전 저장소: 쓰기 · 읽기 · 지우기', (t) async {
|
|
final s = store();
|
|
const key = 'jj.selftest';
|
|
await s.write(key, '비밀-1');
|
|
expect((await s.readAll())[key], '비밀-1');
|
|
await s.write(key, '비밀-2');
|
|
expect((await s.readAll())[key], '비밀-2');
|
|
await s.delete(key);
|
|
expect((await s.readAll()).containsKey(key), isFalse);
|
|
});
|
|
|
|
testWidgets('130: 두 창 (저장소 두 개) 이 번갈아 써도 서로의 값을 지우지 않는다', (t) async {
|
|
const a = 'jj.selftest.a', b = 'jj.selftest.b';
|
|
final first = store(), second = store();
|
|
try {
|
|
await first.readAll(); // 첫 창이 읽어 둠
|
|
await second.write(b, '두 번째 창'); // 두 번째 창이 씀
|
|
await first.write(a, '첫 창'); // 첫 창이 쓸 때 두 번째 창의 값을 지우면 안 된다
|
|
final now = await store().readAll();
|
|
expect(now[a], '첫 창');
|
|
expect(now[b], '두 번째 창');
|
|
await second.delete(b); // 두 번째 창이 지울 때 첫 창의 값을 되살리거나 지우면 안 된다
|
|
final after = await first.readAll();
|
|
expect(after[a], '첫 창');
|
|
expect(after.containsKey(b), isFalse);
|
|
} finally {
|
|
await store().delete(a);
|
|
await store().delete(b);
|
|
}
|
|
final end = await store().readAll();
|
|
expect(end.containsKey(a) || end.containsKey(b), isFalse);
|
|
});
|
|
}
|