| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.gerrit.acceptance.ssh; |
| |
| import static com.google.gerrit.acceptance.GitUtil.cloneProject; |
| import static com.google.gerrit.acceptance.GitUtil.createProject; |
| |
| import com.google.gerrit.acceptance.AbstractDaemonTest; |
| import com.google.gerrit.acceptance.NoHttpd; |
| |
| import org.junit.Assert; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.concurrent.Callable; |
| import java.util.concurrent.ExecutionException; |
| import java.util.concurrent.Executors; |
| import java.util.concurrent.Future; |
| |
| @NoHttpd |
| // To see this test failing with 'verify: false', at least in the Jcsh 0.1.51 |
| // remove bouncycastle libs from the classpath, and run: |
| // buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh:JschVerifyFalseBugIT |
| public class JschVerifyFalseBugIT extends AbstractDaemonTest { |
| |
| @Test |
| @Ignore// we know it works now, so let's not clone a project 500 times ;-) |
| public void test() throws Exception { |
| test(5); |
| } |
| |
| private void test(int threads) throws InterruptedException, |
| ExecutionException { |
| Callable<Void> task = new Callable<Void>() { |
| @Override |
| public Void call() throws Exception { |
| for (int i = 1; i < 100; i++) { |
| String p = "p" + i; |
| createProject(sshSession, p); |
| cloneProject(sshSession.getUrl() + "/" + p); |
| } |
| return null; |
| } |
| }; |
| List<Callable<Void>> nCopies = Collections.nCopies(threads, task); |
| List<Future<Void>> futures = Executors.newFixedThreadPool(threads) |
| .invokeAll(nCopies); |
| for (Future<Void> future : futures) { |
| future.get(); |
| } |
| Assert.assertEquals(threads, futures.size()); |
| } |
| } |