/core/src/test/scala/org/apache/spark/SecurityManagerSuite.scala

https://github.com/lukovnikov/spark · Scala · 178 lines · 131 code · 29 blank · 18 comment · 0 complexity · b82164e2096d32947e0cc92a4fd489bb MD5 · raw file

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.apache.spark
  18. import java.io.File
  19. import org.scalatest.FunSuite
  20. class SecurityManagerSuite extends FunSuite {
  21. test("set security with conf") {
  22. val conf = new SparkConf
  23. conf.set("spark.authenticate", "true")
  24. conf.set("spark.authenticate.secret", "good")
  25. conf.set("spark.ui.acls.enable", "true")
  26. conf.set("spark.ui.view.acls", "user1,user2")
  27. val securityManager = new SecurityManager(conf);
  28. assert(securityManager.isAuthenticationEnabled() === true)
  29. assert(securityManager.aclsEnabled() === true)
  30. assert(securityManager.checkUIViewPermissions("user1") === true)
  31. assert(securityManager.checkUIViewPermissions("user2") === true)
  32. assert(securityManager.checkUIViewPermissions("user3") === false)
  33. }
  34. test("set security with api") {
  35. val conf = new SparkConf
  36. conf.set("spark.ui.view.acls", "user1,user2")
  37. val securityManager = new SecurityManager(conf);
  38. securityManager.setAcls(true)
  39. assert(securityManager.aclsEnabled() === true)
  40. securityManager.setAcls(false)
  41. assert(securityManager.aclsEnabled() === false)
  42. // acls are off so doesn't matter what view acls set to
  43. assert(securityManager.checkUIViewPermissions("user4") === true)
  44. securityManager.setAcls(true)
  45. assert(securityManager.aclsEnabled() === true)
  46. securityManager.setViewAcls(Set[String]("user5"), "user6,user7")
  47. assert(securityManager.checkUIViewPermissions("user1") === false)
  48. assert(securityManager.checkUIViewPermissions("user5") === true)
  49. assert(securityManager.checkUIViewPermissions("user6") === true)
  50. assert(securityManager.checkUIViewPermissions("user7") === true)
  51. assert(securityManager.checkUIViewPermissions("user8") === false)
  52. assert(securityManager.checkUIViewPermissions(null) === true)
  53. }
  54. test("set security modify acls") {
  55. val conf = new SparkConf
  56. conf.set("spark.modify.acls", "user1,user2")
  57. val securityManager = new SecurityManager(conf);
  58. securityManager.setAcls(true)
  59. assert(securityManager.aclsEnabled() === true)
  60. securityManager.setAcls(false)
  61. assert(securityManager.aclsEnabled() === false)
  62. // acls are off so doesn't matter what view acls set to
  63. assert(securityManager.checkModifyPermissions("user4") === true)
  64. securityManager.setAcls(true)
  65. assert(securityManager.aclsEnabled() === true)
  66. securityManager.setModifyAcls(Set("user5"), "user6,user7")
  67. assert(securityManager.checkModifyPermissions("user1") === false)
  68. assert(securityManager.checkModifyPermissions("user5") === true)
  69. assert(securityManager.checkModifyPermissions("user6") === true)
  70. assert(securityManager.checkModifyPermissions("user7") === true)
  71. assert(securityManager.checkModifyPermissions("user8") === false)
  72. assert(securityManager.checkModifyPermissions(null) === true)
  73. }
  74. test("set security admin acls") {
  75. val conf = new SparkConf
  76. conf.set("spark.admin.acls", "user1,user2")
  77. conf.set("spark.ui.view.acls", "user3")
  78. conf.set("spark.modify.acls", "user4")
  79. val securityManager = new SecurityManager(conf);
  80. securityManager.setAcls(true)
  81. assert(securityManager.aclsEnabled() === true)
  82. assert(securityManager.checkModifyPermissions("user1") === true)
  83. assert(securityManager.checkModifyPermissions("user2") === true)
  84. assert(securityManager.checkModifyPermissions("user4") === true)
  85. assert(securityManager.checkModifyPermissions("user3") === false)
  86. assert(securityManager.checkModifyPermissions("user5") === false)
  87. assert(securityManager.checkModifyPermissions(null) === true)
  88. assert(securityManager.checkUIViewPermissions("user1") === true)
  89. assert(securityManager.checkUIViewPermissions("user2") === true)
  90. assert(securityManager.checkUIViewPermissions("user3") === true)
  91. assert(securityManager.checkUIViewPermissions("user4") === false)
  92. assert(securityManager.checkUIViewPermissions("user5") === false)
  93. assert(securityManager.checkUIViewPermissions(null) === true)
  94. securityManager.setAdminAcls("user6")
  95. securityManager.setViewAcls(Set[String]("user8"), "user9")
  96. securityManager.setModifyAcls(Set("user11"), "user9")
  97. assert(securityManager.checkModifyPermissions("user6") === true)
  98. assert(securityManager.checkModifyPermissions("user11") === true)
  99. assert(securityManager.checkModifyPermissions("user9") === true)
  100. assert(securityManager.checkModifyPermissions("user1") === false)
  101. assert(securityManager.checkModifyPermissions("user4") === false)
  102. assert(securityManager.checkModifyPermissions(null) === true)
  103. assert(securityManager.checkUIViewPermissions("user6") === true)
  104. assert(securityManager.checkUIViewPermissions("user8") === true)
  105. assert(securityManager.checkUIViewPermissions("user9") === true)
  106. assert(securityManager.checkUIViewPermissions("user1") === false)
  107. assert(securityManager.checkUIViewPermissions("user3") === false)
  108. assert(securityManager.checkUIViewPermissions(null) === true)
  109. }
  110. test("ssl on setup") {
  111. val conf = SSLSampleConfigs.sparkSSLConfig()
  112. val securityManager = new SecurityManager(conf)
  113. assert(securityManager.fileServerSSLOptions.enabled === true)
  114. assert(securityManager.akkaSSLOptions.enabled === true)
  115. assert(securityManager.sslSocketFactory.isDefined === true)
  116. assert(securityManager.hostnameVerifier.isDefined === true)
  117. assert(securityManager.fileServerSSLOptions.trustStore.isDefined === true)
  118. assert(securityManager.fileServerSSLOptions.trustStore.get.getName === "truststore")
  119. assert(securityManager.fileServerSSLOptions.keyStore.isDefined === true)
  120. assert(securityManager.fileServerSSLOptions.keyStore.get.getName === "keystore")
  121. assert(securityManager.fileServerSSLOptions.trustStorePassword === Some("password"))
  122. assert(securityManager.fileServerSSLOptions.keyStorePassword === Some("password"))
  123. assert(securityManager.fileServerSSLOptions.keyPassword === Some("password"))
  124. assert(securityManager.fileServerSSLOptions.protocol === Some("TLSv1"))
  125. assert(securityManager.fileServerSSLOptions.enabledAlgorithms ===
  126. Set("TLS_RSA_WITH_AES_128_CBC_SHA", "SSL_RSA_WITH_DES_CBC_SHA"))
  127. assert(securityManager.akkaSSLOptions.trustStore.isDefined === true)
  128. assert(securityManager.akkaSSLOptions.trustStore.get.getName === "truststore")
  129. assert(securityManager.akkaSSLOptions.keyStore.isDefined === true)
  130. assert(securityManager.akkaSSLOptions.keyStore.get.getName === "keystore")
  131. assert(securityManager.akkaSSLOptions.trustStorePassword === Some("password"))
  132. assert(securityManager.akkaSSLOptions.keyStorePassword === Some("password"))
  133. assert(securityManager.akkaSSLOptions.keyPassword === Some("password"))
  134. assert(securityManager.akkaSSLOptions.protocol === Some("TLSv1"))
  135. assert(securityManager.akkaSSLOptions.enabledAlgorithms ===
  136. Set("TLS_RSA_WITH_AES_128_CBC_SHA", "SSL_RSA_WITH_DES_CBC_SHA"))
  137. }
  138. test("ssl off setup") {
  139. val file = File.createTempFile("SSLOptionsSuite", "conf")
  140. file.deleteOnExit()
  141. System.setProperty("spark.ssl.configFile", file.getAbsolutePath)
  142. val conf = new SparkConf()
  143. val securityManager = new SecurityManager(conf)
  144. assert(securityManager.fileServerSSLOptions.enabled === false)
  145. assert(securityManager.akkaSSLOptions.enabled === false)
  146. assert(securityManager.sslSocketFactory.isDefined === false)
  147. assert(securityManager.hostnameVerifier.isDefined === false)
  148. }
  149. }