blob: 6a9b5d817a52d74050edebe3451bc52457556704 [file] [log] [blame]
/*
* Copyright 2013-present Facebook, Inc.
*
* 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.facebook.buck.cli;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import com.facebook.buck.testutil.integration.DebuggableTemporaryFolder;
import com.facebook.buck.testutil.integration.ProjectWorkspace;
import com.facebook.buck.testutil.integration.ProjectWorkspace.ProcessResult;
import com.facebook.buck.testutil.integration.TestDataHelper;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.io.Files;
import org.junit.Rule;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
public class NumThreadsIntegrationTest {
@Rule
public DebuggableTemporaryFolder tmp = new DebuggableTemporaryFolder();
@Test
public void testCommandLineNumThreadsArgOverridesBuckConfig() throws IOException {
ProjectWorkspace workspace = TestDataHelper.createProjectWorkspaceForScenario(
this, "num_threads", tmp);
workspace.setUp();
ProcessResult buildResult1 = workspace.runBuckCommand(
"build", "//:noop", "--verbose", "10");
assertThat("Number of threads to use should be read from .buckconfig.",
buildResult1.getStderr(),
containsString("Creating a build with 7 threads.\n"));
ProcessResult buildResult2 = workspace.runBuckCommand(
"build", "//:noop", "--verbose", "10", "--num-threads", "27");
assertThat(
"Command-line arg should override value in .buckconfig.",
buildResult2.getStderr(),
containsString("Creating a build with 27 threads.\n"));
File buckconfig = workspace.getFile(".buckconfig");
assertTrue(buckconfig.delete());
int numThreads = (int)(Runtime.getRuntime().availableProcessors() * 1.25);
ProcessResult buildResult3 = workspace.runBuckCommand(
"build", "//:noop", "--verbose", "10");
assertThat(
"Once .buckconfig is deleted, the number of threads should be " +
"a function of the number of processors.",
buildResult3.getStderr(),
containsString("Creating a build with " + numThreads + " threads.\n"));
}
@Test
public void testBuckProjectUsesNumThreadsInBuckConfigFile() throws IOException {
ProjectWorkspace workspace = TestDataHelper.createProjectWorkspaceForScenario(
this, "num_threads", tmp);
workspace.setUp();
ProcessResult buildResult1 = workspace.runBuckCommand("project", "--verbose", "10");
assertThat("Number of threads to use should be read from .buckconfig.",
buildResult1.getStderr(),
containsString("Creating a build with 7 threads.\n"));
String newBuckProject = Joiner.on('\n').join(
"[project]",
" initial_targets = //:noop");
Files.write(newBuckProject, workspace.getFile(".buckconfig"), Charsets.UTF_8);
int numThreads = (int)(Runtime.getRuntime().availableProcessors() * 1.25);
ProcessResult buildResult2 = workspace.runBuckCommand("project", "--verbose", "10");
assertThat(
"Once num_threads is removed from .buckconfig, the number of threads should be " +
"a function of the number of processors.",
buildResult2.getStderr(),
containsString("Creating a build with " + numThreads + " threads.\n"));
}
}