Files
Gitcloned-WSL2-Distro-Manager/test/dockerimages_test.dart

247 lines
7.2 KiB
Dart

// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'dart:io';
import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:wsl2distromanager/api/docker_images.dart';
import 'package:wsl2distromanager/api/wsl.dart';
import 'package:wsl2distromanager/components/helpers.dart';
import 'package:wsl2distromanager/components/notify.dart';
import 'package:wsl2distromanager/dialogs/create_dialog.dart';
void main() {
void statusMsg(
String msg, {
Duration? duration,
dynamic severity = "",
bool loading = false,
bool useWidget = false,
bool leadingIcon = true,
dynamic widget,
}) {}
// Stuff before tests
setUpAll(() async {
// Init bindings for tests
WidgetsFlutterBinding.ensureInitialized();
DartPluginRegistrant.ensureInitialized(); //<----FIX THE PROBLEM
SharedPreferences.setMockInitialValues({});
// Init prefs
await initPrefs();
Notify();
Notify.message = statusMsg;
});
Future<bool> isInstance(String name) async {
bool found = false;
// Get list
var list = await WSLApi().list(false);
found = false;
for (var item in list.all) {
if (item == name) {
found = true;
}
}
return found;
}
test('Create instance test alpine', () async {
TextEditingController nameController = TextEditingController(text: 'test');
TextEditingController locationController = TextEditingController(text: '');
TextEditingController autoSuggestBox =
TextEditingController(text: 'dockerhub:alpine:latest');
final file = File('C:/WSL2-Distros/distros/library_alpine_latest.tar.gz');
if (await file.exists()) {
await file.delete();
}
// Test build context
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
// Verify that the file exists and has > 2MB
expect(await file.exists(), true);
expect(await file.length(), greaterThan(2 * 1024 * 1024));
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
expect(await isInstance('test'), false);
// Test creating it without re-downloading the rootfs
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
});
test('Create instance test nginx (nonroot)', () async {
TextEditingController nameController = TextEditingController(text: 'test');
TextEditingController locationController = TextEditingController(text: '');
TextEditingController autoSuggestBox =
TextEditingController(text: 'dockerhub:bitnami/nginx:latest');
final file = File('C:/WSL2-Distros/distros/bitnami_nginx_latest.tar.gz');
if (await file.exists()) {
await file.delete();
}
// Delete the instance
await WSLApi().remove('test');
// Test build context
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
// Verify that the file exists and has > 2MB
expect(await file.exists(), true);
expect(await file.length(), greaterThan(2 * 1024 * 1024));
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
expect(await isInstance('test'), false);
// Test creating it without re-downloading the rootfs
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
}, timeout: const Timeout(Duration(minutes: 10)));
test('Docker rootfs download single layer', () async {
const String image = 'library/alpine';
const String tag = 'latest';
const String distroPath = 'C:/WSL2-Distros/distros';
final String filename = DockerImage().filename(image, tag);
final file = File('$distroPath/$filename.tar.gz');
if (await file.exists()) {
await file.delete();
}
// Get rootfs
await DockerImage().getRootfs("test", image, tag: tag,
progress: ((count, total, countStep, totalStep) {
if (kDebugMode) {
print('Downloading $count/$total ($countStep/$totalStep)');
}
}));
// Verify that the file exists and has > 2MB
expect(await file.exists(), true);
expect(await file.length(), greaterThan(2 * 1024 * 1024));
});
// timeout test 2 minutes
test('Docker rootfs download multi layer', () async {
const String image = 'jekyll/jekyll';
const String tag = 'latest';
const String distroPath = 'C:/WSL2-Distros/distros';
final String filename = DockerImage().filename(image, tag);
// Get rootfs
await DockerImage().getRootfs("test", image, tag: tag, skipDownload: false,
progress: ((count, total, countStep, totalStep) {
if (kDebugMode) {
print('Downloading $count/$total ($countStep/$totalStep)');
}
}));
final file = File('$distroPath/$filename.tar.gz');
// Verify that the file exists and has > 2MB
expect(await file.exists(), true);
expect(await file.length(), greaterThan(2 * 1024 * 1024));
}, timeout: const Timeout(Duration(minutes: 10)));
// Test almalinux latest
test('Create instance test almalinux:latest', () async {
TextEditingController nameController = TextEditingController(text: 'test');
TextEditingController locationController = TextEditingController(text: '');
TextEditingController autoSuggestBox =
TextEditingController(text: 'dockerhub:almalinux:latest');
final file =
File('C:/WSL2-Distros/distros/library_almalinux_latest.tar.gz');
if (await file.exists()) {
await file.delete();
}
// Delete the instance
await WSLApi().remove('test');
// Test build context
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
// Verify that the file exists and has > 2MB
expect(await file.exists(), true);
expect(await file.length(), greaterThan(2 * 1024 * 1024));
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
expect(await isInstance('test'), false);
// Test creating it without re-downloading the rootfs
await createInstance(
nameController,
locationController,
WSLApi(),
autoSuggestBox,
TextEditingController(text: ''),
);
expect(await isInstance('test'), true);
// Delete the instance
await WSLApi().remove('test');
}, timeout: const Timeout(Duration(minutes: 10)));
}