PageRenderTime 43ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpecTest.java

https://github.com/mattstep/jclouds
Java | 199 lines | 147 code | 21 blank | 31 comment | 1 complexity | 2399dd7142273a5783d95ce9dee2ce13 MD5 | raw file
  1. /**
  2. * Licensed to jclouds, Inc. (jclouds) under one or more
  3. * contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. jclouds licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. package org.jclouds.scriptbuilder.statements.login;
  20. import static java.lang.String.format;
  21. import static org.jclouds.scriptbuilder.statements.login.AdminAccessBuilderSpec.parse;
  22. import static org.testng.Assert.assertEquals;
  23. import static org.testng.Assert.assertNull;
  24. import static org.testng.Assert.fail;
  25. import java.io.File;
  26. import java.lang.reflect.Field;
  27. import javax.inject.Provider;
  28. import org.jclouds.scriptbuilder.statements.login.AdminAccess.Builder;
  29. import org.testng.annotations.Test;
  30. import com.google.gson.Gson;
  31. /**
  32. *
  33. * <p/>
  34. * inspired by guava {@code CacheBuilderSpecTest}
  35. *
  36. * @author David Alves
  37. */
  38. @Test(testName = "AdminAccessBuilderSpecTest")
  39. public class AdminAccessBuilderSpecTest {
  40. Provider<AdminAccess.Builder> adminAccessBuilders = new Provider<AdminAccess.Builder>() {
  41. @Override
  42. public Builder get() {
  43. return new AdminAccess.Builder();
  44. }
  45. };
  46. public void testParseEmpty() {
  47. AdminAccessBuilderSpec spec = parse("");
  48. assertNull(spec.adminHome);
  49. assertNull(spec.adminPassword);
  50. assertNull(spec.adminPrivateKeyFile);
  51. assertNull(spec.adminPublicKeyFile);
  52. assertNull(spec.adminUsername);
  53. assertNull(spec.authorizeAdminPublicKey);
  54. assertNull(spec.grantSudoToAdminUser);
  55. assertNull(spec.installAdminPrivateKey);
  56. assertNull(spec.lockSsh);
  57. assertNull(spec.loginPassword);
  58. assertNull(spec.resetLoginPassword);
  59. assertAdminAccessBuilderEquivalence(adminAccessBuilders.get(), adminAccessBuilders.get().from(spec));
  60. }
  61. public void testParseAdminUsername() {
  62. AdminAccessBuilderSpec spec = parse("adminUsername=superUser");
  63. assertEquals(spec.adminUsername, "superUser");
  64. assertNull(spec.adminHome);
  65. assertNull(spec.adminPassword);
  66. assertNull(spec.adminPrivateKeyFile);
  67. assertNull(spec.adminPublicKeyFile);
  68. assertNull(spec.authorizeAdminPublicKey);
  69. assertNull(spec.grantSudoToAdminUser);
  70. assertNull(spec.installAdminPrivateKey);
  71. assertNull(spec.lockSsh);
  72. assertNull(spec.loginPassword);
  73. assertNull(spec.resetLoginPassword);
  74. assertAdminAccessBuilderEquivalence(adminAccessBuilders.get().adminUsername("superUser"), adminAccessBuilders
  75. .get().from(spec));
  76. }
  77. public void testParseAdminHome() {
  78. AdminAccessBuilderSpec spec = parse("adminHome=/home/superUser");
  79. assertEquals(spec.getAdminHome(), "/home/superUser");
  80. assertNull(spec.adminUsername);
  81. assertNull(spec.adminPassword);
  82. assertNull(spec.adminPrivateKeyFile);
  83. assertNull(spec.adminPublicKeyFile);
  84. assertNull(spec.authorizeAdminPublicKey);
  85. assertNull(spec.grantSudoToAdminUser);
  86. assertNull(spec.installAdminPrivateKey);
  87. assertNull(spec.lockSsh);
  88. assertNull(spec.loginPassword);
  89. assertNull(spec.resetLoginPassword);
  90. assertAdminAccessBuilderEquivalence(adminAccessBuilders.get().adminHome("/home/superUser"), adminAccessBuilders
  91. .get().from(spec));
  92. }
  93. public void testParsePrivateKeyFile() {
  94. AdminAccessBuilderSpec spec = parse("adminPrivateKeyFile=target/test-classes/test");
  95. assertEquals(spec.getAdminPrivateKeyFile().getPath(), format("target%stest-classes%stest", File.separator, File.separator));
  96. assertNull(spec.adminHome);
  97. assertNull(spec.adminPassword);
  98. assertNull(spec.adminPublicKeyFile);
  99. assertNull(spec.authorizeAdminPublicKey);
  100. assertNull(spec.grantSudoToAdminUser);
  101. assertNull(spec.installAdminPrivateKey);
  102. assertNull(spec.lockSsh);
  103. assertNull(spec.loginPassword);
  104. assertNull(spec.resetLoginPassword);
  105. assertAdminAccessBuilderEquivalence(adminAccessBuilders.get().adminHome("/home/superUser"), adminAccessBuilders
  106. .get().from(spec));
  107. }
  108. public void testParseLockSSh() {
  109. AdminAccessBuilderSpec spec = parse("lockSsh=true");
  110. assertEquals(spec.getLockSsh(), Boolean.TRUE);
  111. assertNull(spec.adminUsername);
  112. assertNull(spec.adminHome);
  113. assertNull(spec.adminPassword);
  114. assertNull(spec.adminPrivateKeyFile);
  115. assertNull(spec.adminPublicKeyFile);
  116. assertNull(spec.authorizeAdminPublicKey);
  117. assertNull(spec.grantSudoToAdminUser);
  118. assertNull(spec.installAdminPrivateKey);
  119. assertNull(spec.loginPassword);
  120. assertNull(spec.resetLoginPassword);
  121. assertAdminAccessBuilderEquivalence(adminAccessBuilders.get().lockSsh(true), adminAccessBuilders.get().from(spec));
  122. }
  123. public void testParseAdminUsernameRepeated() {
  124. try {
  125. parse("adminUsername=superUser, adminUsername=notSoSuperUser");
  126. fail("Expected exception");
  127. } catch (IllegalArgumentException expected) {
  128. // expected
  129. }
  130. }
  131. public void testParseNonExistingFiles() {
  132. try {
  133. parse("adminPrivateKeyFile=nonExistingFile.txt");
  134. fail("Expected exception");
  135. } catch (IllegalArgumentException expected) {
  136. // expected
  137. }
  138. try {
  139. parse("adminPublicKeyFile=nonExistingFile.txt");
  140. fail("Expected exception");
  141. } catch (IllegalArgumentException expected) {
  142. // expected
  143. }
  144. }
  145. public void testNiceJson() {
  146. AdminAccessBuilderSpec spec = parse("adminUsername=nimda,adminPassword=dictionaryword");
  147. assertEquals(new Gson().toJson(spec), "{\"adminUsername\":\"nimda\",\"adminPassword\":\"dictionaryword\"}");
  148. assertEquals(new Gson().fromJson(new Gson().toJson(spec), AdminAccessBuilderSpec.class), spec);
  149. }
  150. public void testParse_unknownKey() {
  151. try {
  152. parse("foo=17");
  153. fail("Expected exception");
  154. } catch (IllegalArgumentException expected) {
  155. // expected
  156. }
  157. }
  158. public void testAdminAccessBuilderFromString() {
  159. AdminAccess.Builder fromString = adminAccessBuilders.get().from(
  160. "adminUsername=nimda,adminPassword=dictionaryword");
  161. AdminAccess.Builder expected = adminAccessBuilders.get().adminUsername("nimda").adminPassword("dictionaryword");
  162. assertAdminAccessBuilderEquivalence(expected, fromString);
  163. }
  164. private void assertAdminAccessBuilderEquivalence(AdminAccess.Builder a, AdminAccess.Builder b) {
  165. // Labs hack: dig into the TemplateBuilder instances, verifying all fields
  166. // are equal.
  167. for (Field f : AdminAccess.Builder.class.getFields()) {
  168. f.setAccessible(true);
  169. try {
  170. assertEquals(f.get(a), f.get(b), "Field " + f.getName() + " not equal");
  171. } catch (IllegalArgumentException e) {
  172. throw new AssertionError(e.getMessage());
  173. } catch (IllegalAccessException e) {
  174. throw new AssertionError(e.getMessage());
  175. }
  176. }
  177. }
  178. }