001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.io.crypto.tls; 019 020import static org.junit.jupiter.api.Assertions.assertEquals; 021import static org.junit.jupiter.api.Assertions.assertNull; 022import static org.junit.jupiter.api.Assertions.assertThrows; 023 024import org.apache.hadoop.hbase.testclassification.SecurityTests; 025import org.apache.hadoop.hbase.testclassification.SmallTests; 026import org.junit.jupiter.api.Tag; 027import org.junit.jupiter.api.Test; 028 029/** 030 * This file has been copied from the Apache ZooKeeper project. 031 * @see <a href= 032 * "https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/test/java/org/apache/zookeeper/common/KeyStoreFileTypeTest.java">Base 033 * revision</a> 034 */ 035@Tag(SecurityTests.TAG) 036@Tag(SmallTests.TAG) 037public class TestKeyStoreFileType { 038 039 @Test 040 public void testGetPropertyValue() { 041 assertEquals("PEM", KeyStoreFileType.PEM.getPropertyValue()); 042 assertEquals("JKS", KeyStoreFileType.JKS.getPropertyValue()); 043 assertEquals("PKCS12", KeyStoreFileType.PKCS12.getPropertyValue()); 044 assertEquals("BCFKS", KeyStoreFileType.BCFKS.getPropertyValue()); 045 } 046 047 @Test 048 public void testFromPropertyValue() { 049 assertEquals(KeyStoreFileType.PEM, KeyStoreFileType.fromPropertyValue("PEM")); 050 assertEquals(KeyStoreFileType.JKS, KeyStoreFileType.fromPropertyValue("JKS")); 051 assertEquals(KeyStoreFileType.PKCS12, KeyStoreFileType.fromPropertyValue("PKCS12")); 052 assertEquals(KeyStoreFileType.BCFKS, KeyStoreFileType.fromPropertyValue("BCFKS")); 053 assertNull(KeyStoreFileType.fromPropertyValue("")); 054 assertNull(KeyStoreFileType.fromPropertyValue(null)); 055 } 056 057 @Test 058 public void testFromPropertyValueIgnoresCase() { 059 assertEquals(KeyStoreFileType.PEM, KeyStoreFileType.fromPropertyValue("pem")); 060 assertEquals(KeyStoreFileType.JKS, KeyStoreFileType.fromPropertyValue("jks")); 061 assertEquals(KeyStoreFileType.PKCS12, KeyStoreFileType.fromPropertyValue("pkcs12")); 062 assertEquals(KeyStoreFileType.BCFKS, KeyStoreFileType.fromPropertyValue("bcfks")); 063 assertNull(KeyStoreFileType.fromPropertyValue("")); 064 assertNull(KeyStoreFileType.fromPropertyValue(null)); 065 } 066 067 @Test 068 public void testFromPropertyValueThrowsOnBadPropertyValue() { 069 assertThrows(IllegalArgumentException.class, 070 () -> KeyStoreFileType.fromPropertyValue("foobar")); 071 } 072 073 @Test 074 public void testFromFilename() { 075 assertEquals(KeyStoreFileType.JKS, KeyStoreFileType.fromFilename("mykey.jks")); 076 assertEquals(KeyStoreFileType.JKS, KeyStoreFileType.fromFilename("/path/to/key/dir/mykey.jks")); 077 assertEquals(KeyStoreFileType.PEM, KeyStoreFileType.fromFilename("mykey.pem")); 078 assertEquals(KeyStoreFileType.PEM, KeyStoreFileType.fromFilename("/path/to/key/dir/mykey.pem")); 079 assertEquals(KeyStoreFileType.PKCS12, KeyStoreFileType.fromFilename("mykey.p12")); 080 assertEquals(KeyStoreFileType.PKCS12, 081 KeyStoreFileType.fromFilename("/path/to/key/dir/mykey.p12")); 082 assertEquals(KeyStoreFileType.BCFKS, KeyStoreFileType.fromFilename("mykey.bcfks")); 083 assertEquals(KeyStoreFileType.BCFKS, 084 KeyStoreFileType.fromFilename("/path/to/key/dir/mykey.bcfks")); 085 } 086 087 @Test 088 public void testFromFilenameThrowsOnBadFileExtension() { 089 assertThrows(IllegalArgumentException.class, () -> KeyStoreFileType.fromFilename("prod.key")); 090 } 091 092 @Test 093 public void testFromPropertyValueOrFileName() { 094 // Property value takes precedence if provided 095 assertEquals(KeyStoreFileType.JKS, 096 KeyStoreFileType.fromPropertyValueOrFileName("JKS", "prod.key")); 097 assertEquals(KeyStoreFileType.PEM, 098 KeyStoreFileType.fromPropertyValueOrFileName("PEM", "prod.key")); 099 assertEquals(KeyStoreFileType.PKCS12, 100 KeyStoreFileType.fromPropertyValueOrFileName("PKCS12", "prod.key")); 101 assertEquals(KeyStoreFileType.BCFKS, 102 KeyStoreFileType.fromPropertyValueOrFileName("BCFKS", "prod.key")); 103 // Falls back to filename detection if no property value 104 assertEquals(KeyStoreFileType.JKS, 105 KeyStoreFileType.fromPropertyValueOrFileName("", "prod.jks")); 106 } 107 108 @Test 109 public void testFromPropertyValueOrFileNameThrowsOnBadPropertyValue() { 110 assertThrows(IllegalArgumentException.class, 111 () -> KeyStoreFileType.fromPropertyValueOrFileName("foobar", "prod.jks")); 112 } 113 114 @Test 115 public void testFromPropertyValueOrFileNameThrowsOnBadFileExtension() { 116 assertThrows(IllegalArgumentException.class, 117 () -> KeyStoreFileType.fromPropertyValueOrFileName("", "prod.key")); 118 } 119}