Mercurial > hg > mercurial
annotate mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgFileUtilTest.java @ 1002:138c9ab0b1f0 Jaipur-2018.1.x
TW-55764: remove option
author | pavel.sher |
---|---|
date | Fri, 29 Jun 2018 11:48:54 +0200 |
parents | 7bf4d943d5bb |
children | 10dc26b32c35 |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
637
diff
changeset
|
16 |
509
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
18 |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
19 |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
20 import jetbrains.buildServer.util.TestFor; |
509
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
21 import org.testng.annotations.Test; |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
22 |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
23 import java.io.File; |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 import java.io.IOException; |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
25 import java.util.ArrayList; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
26 import java.util.HashSet; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
27 import java.util.List; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
28 import java.util.Set; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
29 import java.util.concurrent.CountDownLatch; |
509
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
31 import static org.testng.AssertJUnit.assertEquals; |
509
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 import static org.testng.AssertJUnit.assertFalse; |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
33 |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
34 @Test |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 public class HgFileUtilTest { |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
36 |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
37 public void createTempFile_should_return_unique_dir() throws IOException { |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
38 File tmpDir1 = HgFileUtil.createTempDir(); |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
39 File tmpDir2 = HgFileUtil.createTempDir(); |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
40 assertFalse(tmpDir1.getCanonicalPath().equals(tmpDir2.getCanonicalPath())); |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
41 } |
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
43 |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
44 @TestFor(issues = "TW-30589") |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
45 public void createTempFile_should_always_return_unique_dir() throws Exception { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
46 final CountDownLatch allThreadsInitialized = new CountDownLatch(1); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
47 final Set<File> tmpFiles = new HashSet<File>(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
48 Runnable createTmpFile = new Runnable() { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
49 public void run() { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
50 try { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
51 allThreadsInitialized.await(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
52 tmpFiles.add(HgFileUtil.createTempDir()); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
53 } catch (Exception e) { |
619
b98a288a95b1
write errors to the output
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
615
diff
changeset
|
54 e.printStackTrace(); |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
55 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
56 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
57 }; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
58 |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
59 List<Thread> threads = new ArrayList<Thread>(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
60 for (int i = 0; i < 50; i++) { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
61 Thread t = new Thread(createTmpFile); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
62 t.start(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
63 threads.add(t); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
64 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
65 |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
66 allThreadsInitialized.countDown(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
67 |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
68 for (Thread t : threads) { |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
69 t.join(); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
70 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
71 |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
72 assertEquals("Race condition in createTempDir", threads.size(), tmpFiles.size()); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
509
diff
changeset
|
73 } |
509
94974e3482f6
TW-24405 create unique temp dirs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
74 } |