diff options
Diffstat (limited to 'gerrit-sshd/src/test/java/com/google/gerrit/sshd/scproot/hooks/HookTestCase.java')
-rw-r--r-- | gerrit-sshd/src/test/java/com/google/gerrit/sshd/scproot/hooks/HookTestCase.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gerrit-sshd/src/test/java/com/google/gerrit/sshd/scproot/hooks/HookTestCase.java b/gerrit-sshd/src/test/java/com/google/gerrit/sshd/scproot/hooks/HookTestCase.java new file mode 100644 index 0000000000..5902642220 --- /dev/null +++ b/gerrit-sshd/src/test/java/com/google/gerrit/sshd/scproot/hooks/HookTestCase.java @@ -0,0 +1,102 @@ +// Copyright (C) 2009 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. +// +// Portions related to finding the hook script to execute are: +// Copyright (C) 2008, Imran M Yousuf <imyousuf@smartitengineering.com> +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or +// without modification, are permitted provided that the following +// conditions are met: +// +// - Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// - Neither the name of the Git Development Community nor the +// names of its contributors may be used to endorse or promote +// products derived from this software without specific prior +// written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +// CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.gerrit.sshd.scproot.hooks; + +import com.google.gerrit.testutil.LocalDiskRepositoryTestCase; + +import org.eclipse.jgit.lib.Repository; + +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; + +public abstract class HookTestCase extends LocalDiskRepositoryTestCase { + protected Repository repository; + + @Override + protected void setUp() throws Exception { + super.setUp(); + repository = createWorkRepository(); + } + + protected File getHook(final String name) { + final String scproot = "com/google/gerrit/sshd/scproot"; + final String path = scproot + "/hooks/" + name; + final URL url = cl().getResource(path); + if (url == null) { + fail("Cannot locate " + path + " in CLASSPATH"); + } + + File hook; + try { + hook = new File(url.toURI()); + } catch (URISyntaxException e) { + hook = new File(url.getPath()); + } + if (!hook.isFile()) { + fail("Cannot locate " + path + " in CLASSPATH"); + } + + // The hook was copied out of our source control system into the + // target area by Java tools. Its not executable in the source + // are, nor did the copying Java program make it executable in the + // destination area. So we must force it to be executable. + // + final long time = hook.lastModified(); + hook.setExecutable(true); + hook.setLastModified(time); + return hook; + } + + private ClassLoader cl() { + return HookTestCase.class.getClassLoader(); + } +} |