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
7bf4d943d5bb Update copyright
pavel.sher
parents: 732
diff changeset
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 }