/* * Copyright 2017-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.distributed; import static com.facebook.buck.distributed.DistBuildClientStatsTracker.DistBuildClientStat.*; import org.junit.Assert; import org.junit.Test; public class DistBuildClientStatsTrackerTest { private static final String STAMPEDE_ID_ONE = "stampedeIdOne"; private static final int DISTRIBUTED_BUILD_EXIT_CODE = 0; private static final int LOCAL_BUILD_EXIT_CODE = 1; private static final boolean IS_LOCAL_FALLBACK_BUILD_ENABLED = true; private static final int PERFORM_DISTRIBUTED_BUILD_DURATION = 1; private static final int PERFORM_LOCAL_BUILD_DURATION = 2; private static final int CREATE_DISTRIBUTED_BUILD_DURATION = 3; private static final int UPLOAD_MISSING_FILES_DURATION = 4; private static final int UPLOAD_TARGET_GRAPH_DURATION = 5; private static final int UPLOAD_BUCK_DOT_FILES_DURATION = 6; private static final int SET_BUCK_VERSION_DURATION = 7; private static final int MATERIALIZE_SLAVE_LOGS_DURATION = 8; public static final int MISSING_FILES_UPLOADED_COUNT = 2001; public static final String BUCK_CLIENT_ERROR_MESSAGE = "Some error message"; @Test(expected = java.lang.IllegalArgumentException.class) public void testGenerateThrowsExceptionWhenStatsNotRecorded() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); tracker.generateStats(); } @Test public void testGenerateSucceedsWhenAllStandardStatsSet() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); initializeCommonStats(tracker); DistBuildClientStats stats = tracker.generateStats(); assertCommonStats(stats); } @Test(expected = java.lang.IllegalArgumentException.class) public void testGenerateFailsWhenLocalBuildButMissingLocalBuildFields() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); initializeCommonStats(tracker); tracker.setPerformedLocalBuild(true); tracker.generateStats(); } @Test(expected = java.lang.IllegalArgumentException.class) public void testGenerateFailsWhenNoStampedeId() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); tracker.generateStats(); } @Test(expected = java.lang.IllegalArgumentException.class) public void testGenerateFailsWhenNoErrorButRequiredFieldMissing() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); tracker.setStampedeId(STAMPEDE_ID_ONE); tracker.generateStats(); } @Test public void testGeneratesPartialResultWhenErrorButRequiredFields() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); tracker.setBuckClientError(true); tracker.setBuckClientErrorMessage(BUCK_CLIENT_ERROR_MESSAGE); // The following fields are required for a partial result tracker.setStampedeId(STAMPEDE_ID_ONE); tracker.setDistributedBuildExitCode(DISTRIBUTED_BUILD_EXIT_CODE); tracker.setIsLocalFallbackBuildEnabled(IS_LOCAL_FALLBACK_BUILD_ENABLED); DistBuildClientStats stats = tracker.generateStats(); Assert.assertEquals(STAMPEDE_ID_ONE, stats.stampedeId()); Assert.assertEquals(DISTRIBUTED_BUILD_EXIT_CODE, (long) stats.distributedBuildExitCode().get()); Assert.assertEquals(IS_LOCAL_FALLBACK_BUILD_ENABLED, stats.isLocalFallbackBuildEnabled().get()); Assert.assertEquals(BUCK_CLIENT_ERROR_MESSAGE, stats.buckClientErrorMessage().get()); Assert.assertTrue(stats.buckClientError()); Assert.assertFalse(stats.performDistributedBuildDurationMs().isPresent()); Assert.assertFalse(stats.createDistributedBuildDurationMs().isPresent()); Assert.assertFalse(stats.uploadMissingFilesDurationMs().isPresent()); Assert.assertFalse(stats.uploadTargetGraphDurationMs().isPresent()); Assert.assertFalse(stats.uploadBuckDotFilesDurationMs().isPresent()); Assert.assertFalse(stats.setBuckVersionDurationMs().isPresent()); Assert.assertFalse(stats.materializeSlaveLogsDurationMs().isPresent()); Assert.assertFalse(stats.missingFilesUploadedCount().isPresent()); } @Test public void testGenerateSucceedsWhenLocalBuildAndHasLocalBuildFields() { DistBuildClientStatsTracker tracker = new DistBuildClientStatsTracker(); initializeCommonStats(tracker); tracker.setPerformedLocalBuild(true); tracker.setDurationMs(PERFORM_LOCAL_BUILD, PERFORM_LOCAL_BUILD_DURATION); tracker.setLocalBuildExitCode(LOCAL_BUILD_EXIT_CODE); DistBuildClientStats stats = tracker.generateStats(); assertCommonStats(stats); Assert.assertTrue(stats.performedLocalBuild()); Assert.assertTrue(stats.localBuildExitCode().isPresent()); Assert.assertEquals(LOCAL_BUILD_EXIT_CODE, (long) stats.localBuildExitCode().get()); Assert.assertEquals(PERFORM_LOCAL_BUILD_DURATION, (long) stats.localBuildDurationMs().get()); } private void initializeCommonStats(DistBuildClientStatsTracker tracker) { tracker.setStampedeId(STAMPEDE_ID_ONE); tracker.setDistributedBuildExitCode(DISTRIBUTED_BUILD_EXIT_CODE); tracker.setIsLocalFallbackBuildEnabled(IS_LOCAL_FALLBACK_BUILD_ENABLED); tracker.setDurationMs(PERFORM_DISTRIBUTED_BUILD, PERFORM_DISTRIBUTED_BUILD_DURATION); tracker.setDurationMs(CREATE_DISTRIBUTED_BUILD, CREATE_DISTRIBUTED_BUILD_DURATION); tracker.setDurationMs(UPLOAD_MISSING_FILES, UPLOAD_MISSING_FILES_DURATION); tracker.setDurationMs(UPLOAD_TARGET_GRAPH, UPLOAD_TARGET_GRAPH_DURATION); tracker.setDurationMs(UPLOAD_BUCK_DOT_FILES, UPLOAD_BUCK_DOT_FILES_DURATION); tracker.setDurationMs(SET_BUCK_VERSION, SET_BUCK_VERSION_DURATION); tracker.setDurationMs(MATERIALIZE_SLAVE_LOGS, MATERIALIZE_SLAVE_LOGS_DURATION); tracker.setMissingFilesUploadedCount(MISSING_FILES_UPLOADED_COUNT); } private void assertCommonStats(DistBuildClientStats stats) { Assert.assertEquals(STAMPEDE_ID_ONE, stats.stampedeId()); Assert.assertEquals(IS_LOCAL_FALLBACK_BUILD_ENABLED, stats.isLocalFallbackBuildEnabled().get()); Assert.assertEquals(DISTRIBUTED_BUILD_EXIT_CODE, (long) stats.distributedBuildExitCode().get()); Assert.assertEquals( PERFORM_DISTRIBUTED_BUILD_DURATION, (long) stats.performDistributedBuildDurationMs().get()); Assert.assertEquals( CREATE_DISTRIBUTED_BUILD_DURATION, (long) stats.createDistributedBuildDurationMs().get()); Assert.assertEquals( UPLOAD_MISSING_FILES_DURATION, (long) stats.uploadMissingFilesDurationMs().get()); Assert.assertEquals( UPLOAD_TARGET_GRAPH_DURATION, (long) stats.uploadTargetGraphDurationMs().get()); Assert.assertEquals( UPLOAD_BUCK_DOT_FILES_DURATION, (long) stats.uploadBuckDotFilesDurationMs().get()); Assert.assertEquals(SET_BUCK_VERSION_DURATION, (long) stats.setBuckVersionDurationMs().get()); Assert.assertEquals( MATERIALIZE_SLAVE_LOGS_DURATION, (long) stats.materializeSlaveLogsDurationMs().get()); Assert.assertEquals( MISSING_FILES_UPLOADED_COUNT, (long) stats.missingFilesUploadedCount().get()); Assert.assertFalse(stats.buckClientError()); } }