PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/java/com/atlassian/velocity/htmlsafe/introspection/AllowlistSecureIntrospectorTest.java

https://bitbucket.org/atlassian/velocity-htmlsafe
Java | 92 lines | 81 code | 11 blank | 0 comment | 0 complexity | 7326c87c7808386ae72e288d83772ca0 MD5 | raw file
  1. package com.atlassian.velocity.htmlsafe.introspection;
  2. import org.apache.commons.collections.ExtendedProperties;
  3. import org.apache.velocity.runtime.RuntimeConstants;
  4. import org.apache.velocity.runtime.RuntimeServices;
  5. import org.apache.velocity.runtime.log.Log;
  6. import org.apache.velocity.util.introspection.IntrospectorCacheImpl;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. import org.junit.runner.RunWith;
  10. import org.mockito.Mock;
  11. import org.mockito.junit.MockitoJUnitRunner;
  12. import javax.swing.text.html.Option;
  13. import java.io.File;
  14. import java.io.Serializable;
  15. import java.nio.file.Path;
  16. import java.util.Optional;
  17. import static org.junit.Assert.assertFalse;
  18. import static org.junit.Assert.assertTrue;
  19. import static org.mockito.ArgumentMatchers.any;
  20. import static org.mockito.ArgumentMatchers.eq;
  21. import static org.mockito.Mockito.mock;
  22. import static org.mockito.Mockito.when;
  23. @RunWith(MockitoJUnitRunner.class)
  24. public class AllowlistSecureIntrospectorTest {
  25. private Log log;
  26. @Mock
  27. private RuntimeServices runtimeServices;
  28. private static final String[] RESTRICTED_CLASSES = {"java.io.File", "com.atlassian.velocity.htmlsafe.introspection.test.restrictedclass.MyClass"};
  29. private static final String[] RESTRICTED_PACKAGES = {"java.nio", "com.atlassian.velocity.htmlsafe.introspection.test.restrictedpackage"};
  30. private static final String[] ALLOW_LIST_CLASSES = {"java.io.Serializable"};
  31. private static final String[] ALLOWED_CLASSES = {"java.io.File", "java.nio.file.Path"};
  32. private static final String[] ALLOWED_PACKAGES = {"java.nio.charset"};
  33. @Before
  34. public void setUp() {
  35. log = new Log();
  36. ExtendedProperties configuration = mock(ExtendedProperties.class);
  37. when(runtimeServices.getConfiguration()).thenReturn(configuration);
  38. when(configuration.getString(eq(RuntimeConstants.INTROSPECTOR_CACHE_CLASS), any())).thenReturn(IntrospectorCacheImpl.class.getName());
  39. }
  40. @Test
  41. public void testCheckObjectExecutePermissionWithBadClassesAndEmptyGoodClassesFilterOutCorrectly() {
  42. AllowlistSecureIntrospector introspector = new AllowlistSecureIntrospector(
  43. Optional.of(RESTRICTED_CLASSES),
  44. Optional.of(RESTRICTED_PACKAGES),
  45. Optional.of(ALLOW_LIST_CLASSES),
  46. Optional.empty(),
  47. Optional.empty(),
  48. log,
  49. runtimeServices
  50. );
  51. assertTrue(introspector.checkObjectExecutePermission(Integer.class, ""));
  52. assertTrue((introspector.checkObjectExecutePermission(Serializable.class, "")));
  53. assertFalse(introspector.checkObjectExecutePermission(File.class, ""));
  54. assertFalse(introspector.checkObjectExecutePermission(Path.class, ""));
  55. assertFalse(introspector.checkObjectExecutePermission(java.nio.charset.Charset.class, ""));
  56. assertFalse(introspector.checkObjectExecutePermission(java.nio.charset.spi.CharsetProvider.class, ""));
  57. assertTrue(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.normalpackage.MyClass.class, ""));
  58. assertFalse(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.restrictedpackage.MyClass.class, ""));
  59. assertFalse(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.restrictedclass.MyClass.class, ""));
  60. }
  61. @Test
  62. public void testCheckObjectExecutePermissionWithBadClassesAndGoodClassesFilterOutCorrectly() {
  63. AllowlistSecureIntrospector introspector = new AllowlistSecureIntrospector(
  64. Optional.of(RESTRICTED_CLASSES),
  65. Optional.of(RESTRICTED_PACKAGES),
  66. Optional.of(ALLOW_LIST_CLASSES),
  67. Optional.of(ALLOWED_CLASSES),
  68. Optional.of(ALLOWED_PACKAGES),
  69. log,
  70. runtimeServices
  71. );
  72. assertTrue(introspector.checkObjectExecutePermission(Integer.class, ""));
  73. assertFalse(introspector.checkObjectExecutePermission(File.class, ""));
  74. assertTrue(introspector.checkObjectExecutePermission(Path.class, ""));
  75. assertTrue(introspector.checkObjectExecutePermission(java.nio.charset.Charset.class, ""));
  76. assertFalse(introspector.checkObjectExecutePermission(java.nio.charset.spi.CharsetProvider.class, ""));
  77. assertTrue(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.normalpackage.MyClass.class, ""));
  78. assertFalse(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.restrictedpackage.MyClass.class, ""));
  79. assertFalse(introspector.checkObjectExecutePermission(com.atlassian.velocity.htmlsafe.introspection.test.restrictedclass.MyClass.class, ""));
  80. }
  81. }