view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/BaseCommandTestCase.java @ 976:7bf4d943d5bb

Update copyright
author pavel.sher
date Mon, 22 Jan 2018 11:39:20 +0100
parents 31a1aca3305c
children 10dc26b32c35
line wrap: on
line source
/*
 * Copyright 2000-2018 JetBrains s.r.o.
 *
 * 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 jetbrains.buildServer.buildTriggers.vcs.mercurial.command;

import jetbrains.buildServer.BaseTestCase;
import jetbrains.buildServer.TempFiles;
import jetbrains.buildServer.buildTriggers.vcs.mercurial.*;
import jetbrains.buildServer.vcs.VcsException;
import jetbrains.buildServer.vcs.VcsRoot;
import jetbrains.buildServer.vcs.impl.VcsRootImpl;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;

public class BaseCommandTestCase extends BaseTestCase {
  private String myRepository;
  private String myUsername;
  private String myPassword;
  private boolean myCloneRequired;
  protected CommandSettingsFactory myCommandSettingsFactory = new TestCommandSettingsFactory();

  public BaseCommandTestCase() {
  }

  protected void setRepository(final String repository, boolean cloneRequired) {
    myRepository = repository;
    myCloneRequired = cloneRequired;
  }

  protected void setUsername(final String username) {
    myUsername = username;
  }

  protected void setPassword(final String password) {
    myPassword = password;
  }

  protected <T> T runCommand(CommandExecutor<T> executor) throws IOException, VcsException {
    Map<String, String> vcsRootProps = new HashMap<String, String>();

    vcsRootProps.put(Constants.REPOSITORY_PROP, myRepository);

    TempFiles tempFiles = new TempFiles();

    if (myCloneRequired) {
      File repository = copyRepository(tempFiles, new File(myRepository).getAbsolutePath());
      vcsRootProps.put(Constants.REPOSITORY_PROP, repository.getAbsolutePath());
    }

    vcsRootProps.put(Constants.HG_COMMAND_PATH_PROP, Util.getHgPath());
    if (myUsername != null) {
      vcsRootProps.put(Constants.USERNAME, myUsername);
    }
    if (myPassword != null) {
      vcsRootProps.put(Constants.PASSWORD, myPassword);
    }

    VcsRoot vcsRoot = new VcsRootImpl(1, vcsRootProps);
    ServerPluginConfig config = new ServerPluginConfigBuilder().cachesDir(tempFiles.createTempDir()).build();
    MirrorManager mirrorManager = new MirrorManagerImpl(config);
    ServerHgPathProvider hgPathProvider = new ServerHgPathProvider(config);
    HgVcsRoot root = new HgVcsRoot(vcsRoot);
    final File workingDir = mirrorManager.getMirrorDir(root.getRepository());
    root.setCustomWorkingDir(workingDir);
    try {
      if (myCloneRequired) {
        new HgRepo(myCommandSettingsFactory, workingDir, hgPathProvider.getHgPath(root), root.getAuthSettings()).doClone().fromRepository(root.getRepository()).call();
      }

      return executor.execute(root, hgPathProvider, workingDir);
    } finally {
      tempFiles.cleanup();
    }
  }

  public interface CommandExecutor<T> {
    T execute(@NotNull HgVcsRoot root, @NotNull HgPathProvider hgPathProvider, @NotNull File workingDir) throws VcsException;
  }
}