|  | @@ -22,6 +22,8 @@ package org.elasticsearch.action.admin.indices.rollover;
 | 
	
		
			
				|  |  |  import org.elasticsearch.Version;
 | 
	
		
			
				|  |  |  import org.elasticsearch.action.admin.indices.alias.IndicesAliasesClusterStateUpdateRequest;
 | 
	
		
			
				|  |  |  import org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest;
 | 
	
		
			
				|  |  | +import org.elasticsearch.action.admin.indices.stats.CommonStats;
 | 
	
		
			
				|  |  | +import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
 | 
	
		
			
				|  |  |  import org.elasticsearch.action.support.ActiveShardCount;
 | 
	
		
			
				|  |  |  import org.elasticsearch.cluster.metadata.AliasAction;
 | 
	
		
			
				|  |  |  import org.elasticsearch.cluster.metadata.AliasMetaData;
 | 
	
	
		
			
				|  | @@ -40,12 +42,30 @@ import java.util.List;
 | 
	
		
			
				|  |  |  import java.util.Locale;
 | 
	
		
			
				|  |  |  import java.util.Set;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import org.mockito.ArgumentCaptor;
 | 
	
		
			
				|  |  |  import static org.elasticsearch.action.admin.indices.rollover.TransportRolloverAction.evaluateConditions;
 | 
	
		
			
				|  |  |  import static org.hamcrest.Matchers.equalTo;
 | 
	
		
			
				|  |  |  import static org.hamcrest.Matchers.hasSize;
 | 
	
		
			
				|  |  | +import static org.mockito.Matchers.any;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.verify;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.mock;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.when;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  public class TransportRolloverActionTests extends ESTestCase {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    public void testDocStatsSelectionFromPrimariesOnly() throws Exception {
 | 
	
		
			
				|  |  | +        long docsInPrimaryShards = 100;
 | 
	
		
			
				|  |  | +        long docsInShards = 200;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        final Condition condition = createTestCondition();
 | 
	
		
			
				|  |  | +        evaluateConditions(Sets.newHashSet(condition), createMetaData(), createIndecesStatResponse(docsInShards, docsInPrimaryShards));
 | 
	
		
			
				|  |  | +        final ArgumentCaptor<Condition.Stats> argument = ArgumentCaptor.forClass(Condition.Stats.class);
 | 
	
		
			
				|  |  | +        verify(condition).evaluate(argument.capture());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        assertEquals(docsInPrimaryShards, argument.getValue().numDocs);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public void testEvaluateConditions() throws Exception {
 | 
	
		
			
				|  |  |          MaxDocsCondition maxDocsCondition = new MaxDocsCondition(100L);
 | 
	
		
			
				|  |  |          MaxAgeCondition maxAgeCondition = new MaxAgeCondition(TimeValue.timeValueHours(2));
 | 
	
	
		
			
				|  | @@ -190,4 +210,37 @@ public class TransportRolloverActionTests extends ESTestCase {
 | 
	
		
			
				|  |  |          assertThat(createIndexRequest.index(), equalTo(rolloverIndex));
 | 
	
		
			
				|  |  |          assertThat(createIndexRequest.cause(), equalTo("rollover_index"));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private IndicesStatsResponse createIndecesStatResponse(long totalDocs, long primaryDocs) {
 | 
	
		
			
				|  |  | +        final CommonStats primaryStats = mock(CommonStats.class);
 | 
	
		
			
				|  |  | +        when(primaryStats.getDocs()).thenReturn(new DocsStats(primaryDocs, 0));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        final CommonStats totalStats = mock(CommonStats.class);
 | 
	
		
			
				|  |  | +        when(totalStats.getDocs()).thenReturn(new DocsStats(totalDocs, 0));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        final IndicesStatsResponse response = mock(IndicesStatsResponse.class);
 | 
	
		
			
				|  |  | +        when(response.getPrimaries()).thenReturn(primaryStats);
 | 
	
		
			
				|  |  | +        when(response.getTotal()).thenReturn(totalStats);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return response;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private IndexMetaData createMetaData() {
 | 
	
		
			
				|  |  | +        final Settings settings = Settings.builder()
 | 
	
		
			
				|  |  | +            .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
 | 
	
		
			
				|  |  | +            .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
 | 
	
		
			
				|  |  | +            .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
 | 
	
		
			
				|  |  | +            .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)
 | 
	
		
			
				|  |  | +            .build();
 | 
	
		
			
				|  |  | +        return IndexMetaData.builder(randomAlphaOfLength(10))
 | 
	
		
			
				|  |  | +            .creationDate(System.currentTimeMillis() - TimeValue.timeValueHours(3).getMillis())
 | 
	
		
			
				|  |  | +            .settings(settings)
 | 
	
		
			
				|  |  | +            .build();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private Condition createTestCondition() {
 | 
	
		
			
				|  |  | +        final Condition condition = mock(Condition.class);
 | 
	
		
			
				|  |  | +        when(condition.evaluate(any())).thenReturn(new Condition.Result(condition, true));
 | 
	
		
			
				|  |  | +        return condition;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |