|  | // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | // | 
|  | // Test for a race condition that can occur when recursively creating | 
|  | // a directory multiple times simultaneously.  This consistently reproduces | 
|  | // issue https://code.google.com/p/dart/issues/detail?id=7679 in revisions | 
|  | // without the fix for this issue. | 
|  |  | 
|  | // @dart = 2.9 | 
|  |  | 
|  | import "dart:async"; | 
|  | import "dart:io"; | 
|  |  | 
|  | import "package:async_helper/async_helper.dart"; | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | void testCreateRecursiveRace() { | 
|  | asyncStart(); | 
|  | var temp = Directory.systemTemp.createTempSync('dart_directory_create_race'); | 
|  | var d = new Directory('${temp.path}/a/b/c/d/e'); | 
|  | Future.wait([ | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true), | 
|  | d.create(recursive: true) | 
|  | ]).then((_) { | 
|  | Expect.isTrue(new Directory('${temp.path}/a').existsSync()); | 
|  | Expect.isTrue(new Directory('${temp.path}/a/b').existsSync()); | 
|  | Expect.isTrue(new Directory('${temp.path}/a/b/c').existsSync()); | 
|  | Expect.isTrue(new Directory('${temp.path}/a/b/c/d').existsSync()); | 
|  | Expect.isTrue(new Directory('${temp.path}/a/b/c/d/e').existsSync()); | 
|  | temp.delete(recursive: true).then((_) { | 
|  | asyncEnd(); | 
|  | }); | 
|  | }); | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | testCreateRecursiveRace(); | 
|  | testCreateRecursiveRace(); | 
|  | } |