/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ package org.opensearch.knn.index.codec; import org.apache.lucene.codecs.Codec; import org.opensearch.cluster.metadata.IndexMetadata; import org.opensearch.common.settings.Settings; import org.opensearch.core.index.Index; import org.opensearch.index.IndexSettings; import org.opensearch.index.codec.CodecServiceConfig; import org.opensearch.index.mapper.MapperService; import org.opensearch.knn.KNNTestCase; import org.apache.logging.log4j.Logger; import java.util.UUID; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Test for KNNCodecService class with focus on codec by name lookup */ public class KNNCodecServiceTests extends KNNTestCase { private static final String TEST_INDEX = "test-index"; private static final int NUM_OF_SHARDS = 1; private static final UUID INDEX_UUID = UUID.randomUUID(); private IndexSettings indexSettings; @Override public void setUp() throws Exception { super.setUp(); IndexMetadata indexMetadata = mock(IndexMetadata.class); when(indexMetadata.getIndex()).thenReturn(new Index(TEST_INDEX, INDEX_UUID.toString())); when(indexMetadata.getSettings()).thenReturn(Settings.EMPTY); Settings settings = Settings.builder().put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, Integer.toString(NUM_OF_SHARDS)).build(); indexSettings = new IndexSettings(indexMetadata, settings); } public void testGetCodecByName() { MapperService mapperService = mock(MapperService.class); Logger loggerMock = mock(Logger.class); CodecServiceConfig codecServiceConfig = new CodecServiceConfig(indexSettings, mapperService, loggerMock); KNNCodecService knnCodecService = new KNNCodecService(codecServiceConfig); Codec codec = knnCodecService.codec(KNNCodecVersion.current().getCodecName()); assertNotNull(codec); } /** * This test case covers scenarios when MapperService is null, for instance this may happen during index.close operation. * In such scenario codec is not really required but is created as part of engine initialization, please check code references below: * @see EngineConfig.java * @see IndexShard.java * @see Engine.java */ public void testGetCodecByNameWithNoMapperService() { Logger loggerMock = mock(Logger.class); CodecServiceConfig codecServiceConfig = new CodecServiceConfig(indexSettings, null, loggerMock); KNNCodecService knnCodecService = new KNNCodecService(codecServiceConfig); Codec codec = knnCodecService.codec(KNNCodecVersion.current().getCodecName()); assertNotNull(codec); } }