PageRenderTime 47ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/src/test/java/org/apache/oozie/tools/TestECPolicyDisabler.java

https://github.com/apache/oozie
Java | 154 lines | 117 code | 17 blank | 20 comment | 0 complexity | c28718e10c9ad712abdedc1c178860f9 MD5 | raw file
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF 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, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.oozie.tools;
  19. import static org.junit.Assert.assertEquals;
  20. import static org.junit.Assert.assertNotNull;
  21. import static org.mockito.ArgumentMatchers.any;
  22. import static org.mockito.ArgumentMatchers.eq;
  23. import static org.mockito.Mockito.mock;
  24. import static org.mockito.Mockito.verify;
  25. import static org.mockito.Mockito.verifyNoMoreInteractions;
  26. import static org.mockito.Mockito.when;
  27. import org.apache.hadoop.fs.FileSystem;
  28. import org.apache.hadoop.fs.Path;
  29. import org.apache.hadoop.hdfs.DistributedFileSystem;
  30. import org.apache.hadoop.hdfs.protocol.SystemErasureCodingPolicies;
  31. import org.apache.hadoop.hdfs.protocol.SystemErasureCodingPolicies.ReplicationPolicy;
  32. import org.apache.hadoop.ipc.RemoteException;
  33. import org.apache.hadoop.ipc.protobuf.RpcHeaderProtos.RpcResponseHeaderProto.RpcErrorCodeProto;
  34. import org.apache.oozie.tools.ECPolicyDisabler.Result;
  35. import org.junit.Assert;
  36. import org.junit.Before;
  37. import org.junit.Test;
  38. import org.mockito.Mockito;
  39. /**
  40. * Test for the Erasure Coding disabler code.
  41. */
  42. public class TestECPolicyDisabler {
  43. static abstract class MockDistributedFileSystem extends DistributedFileSystem {
  44. public abstract SystemErasureCodingPolicies.ReplicationPolicy getErasureCodingPolicy(Path path);
  45. public abstract void setErasureCodingPolicy(Path path, String policy);
  46. }
  47. @Before
  48. public void setup() {
  49. SystemErasureCodingPolicies.setSystemPolicy(ReplicationPolicy.DEFAULT);
  50. }
  51. @Test
  52. public void testNotSupported() {
  53. FileSystem fs = mock(FileSystem.class);
  54. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  55. Assert.assertEquals("result is expected", Result.NOT_SUPPORTED, result);
  56. }
  57. @Test
  58. public void testOkNotChanged() {
  59. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  60. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.DEFAULT);
  61. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  62. assertEquals("result is expected", Result.ALREADY_SET, result);
  63. verify(fs).getErasureCodingPolicy(any());
  64. verifyNoMoreInteractions(fs);
  65. }
  66. @Test
  67. public void testOkChanged() {
  68. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  69. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.OTHER);
  70. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  71. assertEquals("result is expected", Result.DONE, result);
  72. verify(fs).getErasureCodingPolicy(any());
  73. verify(fs).setErasureCodingPolicy(any(), eq("DEFAULT"));
  74. verifyNoMoreInteractions(fs);
  75. }
  76. @Test
  77. public void testServerNotSupports() {
  78. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  79. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.OTHER);
  80. Mockito.doThrow(createNoSuchMethodException()).when(fs).setErasureCodingPolicy(any(), any());
  81. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  82. assertEquals("result is expected", Result.NO_SUCH_METHOD, result);
  83. verify(fs).getErasureCodingPolicy(any());
  84. verify(fs).setErasureCodingPolicy(any(), eq("DEFAULT"));
  85. verifyNoMoreInteractions(fs);
  86. }
  87. @Test
  88. public void testServerNotSupportsGetErasureCodingPolicyMethod() {
  89. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  90. when(fs.getErasureCodingPolicy(any(Path.class))).thenThrow(createNoSuchMethodException());
  91. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, mock(Path.class));
  92. assertEquals("result is expected", Result.NO_SUCH_METHOD, result);
  93. verify(fs).getErasureCodingPolicy(any(Path.class));
  94. verifyNoMoreInteractions(fs);
  95. }
  96. @Test
  97. public void testServerNotSupportsGetName() {
  98. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  99. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.OTHER);
  100. ReplicationPolicy mockPolicy = mock(ReplicationPolicy.class);
  101. SystemErasureCodingPolicies.setSystemPolicy(mockPolicy);
  102. when(mockPolicy.getName()).thenThrow(createNoSuchMethodException());
  103. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  104. assertEquals("result is expected", Result.NO_SUCH_METHOD, result);
  105. verify(fs).getErasureCodingPolicy(any());
  106. verifyNoMoreInteractions(fs);
  107. }
  108. @Test
  109. public void testServerNotSupportsSetErasureCodingPolicyMethod() {
  110. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  111. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.OTHER);
  112. Mockito.doThrow(createNoSuchMethodException()).when(fs).setErasureCodingPolicy(any(), any());
  113. ECPolicyDisabler.Result result = ECPolicyDisabler.check(fs, null);
  114. assertEquals("result is expected", Result.NO_SUCH_METHOD, result);
  115. verify(fs).getErasureCodingPolicy(any());
  116. verify(fs).setErasureCodingPolicy(any(), eq("DEFAULT"));
  117. verifyNoMoreInteractions(fs);
  118. }
  119. @Test
  120. public void testOtherRuntimeExceptionThrown() {
  121. MockDistributedFileSystem fs = mock(MockDistributedFileSystem.class);
  122. when(fs.getErasureCodingPolicy(any())).thenReturn(ReplicationPolicy.OTHER);
  123. Mockito.doThrow(new RuntimeException("mock io exception")).when(fs).setErasureCodingPolicy(any(), any());
  124. try {
  125. ECPolicyDisabler.check(fs, null);
  126. Assert.fail("exception expected");
  127. } catch (RuntimeException e) {
  128. assertNotNull("runtime exception got", e);
  129. }
  130. verify(fs).getErasureCodingPolicy(any());
  131. verify(fs).setErasureCodingPolicy(any(), eq("DEFAULT"));
  132. verifyNoMoreInteractions(fs);
  133. }
  134. private RuntimeException createNoSuchMethodException() {
  135. return new RuntimeException(new RemoteException("test", "error", RpcErrorCodeProto.ERROR_NO_SUCH_METHOD));
  136. }
  137. }