Browse Source

Add Dart 2 example (#6549)

Kevin Moore 4 years ago
parent
commit
266bda9d00

+ 3 - 0
frameworks/Dart/dart2/.gitignore

@@ -0,0 +1,3 @@
+.packages
+.dart_tool
+pubspec.lock

+ 22 - 0
frameworks/Dart/dart2/README.md

@@ -0,0 +1,22 @@
+# Dart 2 Benchmarking Test
+
+### Test Type Implementation Source Code
+
+- [JSON](server.dart)
+- [PLAINTEXT](server.dart)
+
+## Important Libraries
+
+The tests were run with:
+
+- [Dart v2.12](https://dart.dev/)
+
+## Test URLs
+
+### JSON
+
+http://localhost:8080/json
+
+### PLAINTEXT
+
+http://localhost:8080/plaintext

+ 28 - 0
frameworks/Dart/dart2/analysis_options.yaml

@@ -0,0 +1,28 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+  strong-mode:
+    implicit-casts: false
+linter:
+  rules:
+    - avoid_dynamic_calls
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - constant_identifier_names
+    - control_flow_in_finally
+    - directives_ordering
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - list_remove_unrelated_type
+    - non_constant_identifier_names
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_expression_function_bodies
+    - test_types_in_equals
+    - throw_in_finally
+    - unnecessary_brace_in_string_interps

+ 26 - 0
frameworks/Dart/dart2/benchmark_config.json

@@ -0,0 +1,26 @@
+{
+  "framework": "dart2",
+  "tests": [
+    {
+      "default": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "port": 8080,
+        "approach": "Stripped",
+        "classification": "Platform",
+        "database": "None",
+        "framework": "None",
+        "language": "Dart",
+        "flavor": "None",
+        "orm": "None",
+        "platform": "None",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Dart2",
+        "notes": "",
+        "versus": "None"
+      }
+    }
+  ]
+}

+ 11 - 0
frameworks/Dart/dart2/dart2.dockerfile

@@ -0,0 +1,11 @@
+FROM google/dart:2.12
+
+WORKDIR /dart_app
+COPY pubspec.yaml pubspec.yaml
+COPY server.dart server.dart
+
+RUN pub upgrade
+
+EXPOSE 8080
+
+CMD ["dart", "server.dart"]

+ 7 - 0
frameworks/Dart/dart2/pubspec.yaml

@@ -0,0 +1,7 @@
+name: dartbenchmark
+description: A benchmark of dart
+environment:
+  sdk: '>=2.12.0 <3.0.0'
+
+dev_dependencies:
+  pedantic: ^1.0.0

+ 88 - 0
frameworks/Dart/dart2/server.dart

@@ -0,0 +1,88 @@
+import 'dart:async' show Future;
+import 'dart:convert';
+import 'dart:io';
+import 'dart:isolate';
+
+final _procNumber = Platform.numberOfProcessors;
+
+final _encoder = JsonUtf8Encoder();
+
+void main(List<String> args) {
+  var errorPort = ReceivePort();
+  errorPort.listen((e) => print(e));
+  for (var i = 1; i < _procNumber; i++) {
+    Isolate.spawn(_startInIsolate, [], onError: errorPort.sendPort);
+  }
+  _startInIsolate([]);
+}
+
+void _startInIsolate(List args) {
+  _startServer();
+}
+
+Future<void> _startServer() async {
+  final server = await HttpServer.bind('0.0.0.0', 8080, shared: true);
+  server.defaultResponseHeaders.clear();
+  server.serverHeader = 'dart';
+  server.listen((request) {
+    switch (request.uri.path) {
+      case '/json':
+        _jsonTest(request);
+        break;
+      case '/plaintext':
+        _plaintextTest(request);
+        break;
+      default:
+        _sendResponse(request, HttpStatus.notFound);
+        break;
+    }
+  });
+}
+
+/// Completes the given [request] by writing the [bytes] with the given
+/// [statusCode] and [type].
+void _sendResponse(
+  HttpRequest request,
+  int statusCode, {
+  ContentType? type,
+  List<int>? bytes,
+}) {
+  final response = request.response;
+  response
+    ..statusCode = statusCode
+    ..headers.date = DateTime.now();
+  if (type != null) {
+    response.headers.contentType = type;
+  }
+  if (bytes != null) {
+    response
+      ..contentLength = bytes.length
+      ..add(bytes);
+  } else {
+    response.contentLength = 0;
+  }
+  response.close();
+}
+
+/// Completes the given [request] by writing the [response] as JSON.
+void _sendJson(HttpRequest request, Object response) => _sendResponse(
+      request,
+      HttpStatus.ok,
+      type: ContentType.json,
+      bytes: _encoder.convert(response),
+    );
+
+/// Completes the given [request] by writing the [response] as plain text.
+void _sendText(HttpRequest request, String response) => _sendResponse(
+      request,
+      HttpStatus.ok,
+      type: ContentType.text,
+      bytes: utf8.encode(response),
+    );
+
+/// Responds with the JSON test to the [request].
+void _jsonTest(HttpRequest request) =>
+    _sendJson(request, const {'message': 'Hello, World!'});
+
+/// Responds with the plaintext test to the [request].
+void _plaintextTest(HttpRequest request) => _sendText(request, 'Hello, World!');