-2

The following class gets the certificate from venafi.. it it isnt available it uses the cache certificate.

@Configuration

public class VenafiConfig (
public static final String CACHE_KEYSTORE_KEY “keystore”;
@value("${venafi.enabled: true}")
public boolean venafiEnabled;

@Autowired
private VenafiProperties venafiProperties;
/
@Bean (name "keystoreService")
@Profile("cloud")

public CloudKeystoreService cloudkeystoreService(Environment env) throws InvalidKeystoreException {
CloudKeystoreService cloudKeystoreService = null;

if (venafiEnabled) {
try {

CachedKeyStore cachedKeyStore;
}

Credential credentials = venafiProperties.getVenafi().get(“domain”);
VenafiCertificateCacheResolver resolver = new VenafiCertificateCacheResolver (credentials.getUri(),
credentials.getUsername (), credentials.getPassword());


resolver.addCertificate (CACHE_KEYSTORE_KEY, credentials.getPolicypath());

cloudKeystoreService = new CloudKeystoreService().addCacheResolver(resolver). LoadCache();
cachedKeyStore= cloudKeystoreService.cache().get (CACHE_KEYSTORE_KEY);
if (null == cachedKeyStore) {
throw new RuntimeException (" Application KeyStore not found in venafi!");
}
log.info("Downloaded certificate from venafi.");
} catch (RuntimeException e) {
Log.warn("Couldnot download certificate from Venafi url.".
+ e.getMessage());
} else {
cloudKeystoreService = getVcapkeystore();

Log.info("***Venafi service is disabled. ***");

}

Return cloudKeystoreService
}

public CloudKeystoreService getVcapkeystore () throws CacheResolutionException, InvalidKeystoreException {
Log.info( Downloading certificate from vcap service...'));
CloudKeystoreService cloudKeystoreService = null;

Credential credentials = venafiProperties.getVenafi().get(“domain”);
 Base64KeystoreCacheResolver resolver = new Base64KeystoreCacheResolver();
CachedKeyStore keystore= new CachedKeyStore (CACHE_KEYSTORE_KEY, credentials.getKeystorePwd(), credentials.getKeystoreFile());
resolver.addkeystore (keystore);
cloudKeystoreService = new CloudKeystoreService().addCacheResolver (resolver);
CachedKeyStore cachedKeyStore= cloudKeystoreService.LoadCache().cache().get (CACHE_KEYSTORE_KEY).makeDefault(true);
if (cachedKeyStore == null)
{
throw new RuntimeException ("Application KeyStore not found in vcap service!”);}

Log.info("Downloaded certificate from vcap service");
return cloudKeystoreService;
}

I am writing the following JUnit cases to increase the code coverage :

@Mock
    private VenafiProperties venafiProperties;

    @Mock
    private Environment environment;

    private VenafiConfig venafiConfig;

    @BeforeEach
    void setUp() {
        MockitoAnnotations.initMocks(this);
        venafiConfig = new VenafiConfig();
        venafiConfig.venafiProperties = venafiProperties;
    }

    @Test
    void testCloudKeystoreServicePbas_WhenVenafiEnabled() {
        
        venafiConfig.venafiEnabled = true;
        when(venafiProperties.getVenafi()).thenReturn(/* mocking properties*/);

       
        CloudKeystoreService result = venafiConfig.cloudkeystoreService(environment);

        // Assert
        assertNotNull(result);
        // Add more specific assertions
    }

    @Test
    void testCloudKeystoreServicePbas_WhenVenafiDisabled() {
        venafiConfig.venafiEnabled = false;

        
        CloudKeystoreService result = venafiConfig.cloudkeystoreServi(environment);

        // Assert
        assertNull(result); // Since Venafi is disabled, the result should be null
    }

    @Test
    void testGetVcapkeystore() {
    
        when(venafiProperties.getVenafi()).thenReturn(/* mock Venafi properties */);

        
        CloudKeystoreService result = venafiConfig.getVcapkeystore();

        
        assertNotNull(result);
        // Add more specific assertions 
    }
}

I keep getting a null pointer exception at

    CloudKeystoreService result = venafiConfig.cloudkeystoreServi(environment); 

How should I proceed with the test cases. I am new to JUnit testing

I have tried setting up mock environment and adding the properties but the funciton throws NP

  • 2
    Your code does not compile, but we need a [mcve]. If you have problems with one test, just include that test, not a bunch of other tests. Indent your code, this is hard to read as-is. – Robert Aug 28 '23 at 20:03

0 Answers0