|
@@ -32,7 +32,6 @@ import org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResp
|
|
|
import org.apache.hadoop.yarn.server.api.records.MasterKey;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNM;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
|
|
|
-import org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager;
|
|
|
import org.junit.Test;
|
|
|
|
|
|
public class TestRMNMSecretKeys {
|
|
@@ -69,59 +68,94 @@ public class TestRMNMSecretKeys {
|
|
|
rm.init(conf);
|
|
|
rm.start();
|
|
|
|
|
|
+ // Testing ContainerToken and NMToken
|
|
|
+ String containerToken = "Container Token : ";
|
|
|
+ String nmToken = "NM Token : ";
|
|
|
+
|
|
|
MockNM nm = new MockNM("host:1234", 3072, rm.getResourceTrackerService());
|
|
|
RegisterNodeManagerResponse registrationResponse = nm.registerNode();
|
|
|
- MasterKey masterKey = registrationResponse.getMasterKey();
|
|
|
- Assert.assertNotNull("Registration should cause a key-update!", masterKey);
|
|
|
+
|
|
|
+ MasterKey containerTokenMasterKey =
|
|
|
+ registrationResponse.getContainerTokenMasterKey();
|
|
|
+ Assert.assertNotNull(containerToken
|
|
|
+ + "Registration should cause a key-update!", containerTokenMasterKey);
|
|
|
+ MasterKey nmTokenMasterKey = registrationResponse.getNMTokenMasterKey();
|
|
|
+ Assert.assertNotNull(nmToken
|
|
|
+ + "Registration should cause a key-update!", nmTokenMasterKey);
|
|
|
+
|
|
|
dispatcher.await();
|
|
|
|
|
|
NodeHeartbeatResponse response = nm.nodeHeartbeat(true);
|
|
|
- Assert.assertNull(
|
|
|
+ Assert.assertNull(containerToken +
|
|
|
"First heartbeat after registration shouldn't get any key updates!",
|
|
|
- response.getMasterKey());
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNull(nmToken +
|
|
|
+ "First heartbeat after registration shouldn't get any key updates!",
|
|
|
+ response.getNMTokenMasterKey());
|
|
|
dispatcher.await();
|
|
|
|
|
|
response = nm.nodeHeartbeat(true);
|
|
|
- Assert
|
|
|
- .assertNull(
|
|
|
- "Even second heartbeat after registration shouldn't get any key updates!",
|
|
|
- response.getMasterKey());
|
|
|
+ Assert.assertNull(containerToken +
|
|
|
+ "Even second heartbeat after registration shouldn't get any key updates!",
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNull(nmToken +
|
|
|
+ "Even second heartbeat after registration shouldn't get any key updates!",
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+
|
|
|
dispatcher.await();
|
|
|
|
|
|
// Let's force a roll-over
|
|
|
- RMContainerTokenSecretManager secretManager =
|
|
|
- rm.getRMContainerTokenSecretManager();
|
|
|
- secretManager.rollMasterKey();
|
|
|
+ rm.getRMContainerTokenSecretManager().rollMasterKey();
|
|
|
+ rm.getRMNMTokenSecretManager().rollMasterKey();
|
|
|
|
|
|
// Heartbeats after roll-over and before activation should be fine.
|
|
|
response = nm.nodeHeartbeat(true);
|
|
|
- Assert.assertNotNull(
|
|
|
+ Assert.assertNotNull(containerToken +
|
|
|
"Heartbeats after roll-over and before activation should not err out.",
|
|
|
- response.getMasterKey());
|
|
|
- Assert.assertEquals(
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNotNull(nmToken +
|
|
|
+ "Heartbeats after roll-over and before activation should not err out.",
|
|
|
+ response.getNMTokenMasterKey());
|
|
|
+
|
|
|
+ Assert.assertEquals(containerToken +
|
|
|
"Roll-over should have incremented the key-id only by one!",
|
|
|
- masterKey.getKeyId() + 1, response.getMasterKey().getKeyId());
|
|
|
+ containerTokenMasterKey.getKeyId() + 1,
|
|
|
+ response.getContainerTokenMasterKey().getKeyId());
|
|
|
+ Assert.assertEquals(nmToken +
|
|
|
+ "Roll-over should have incremented the key-id only by one!",
|
|
|
+ nmTokenMasterKey.getKeyId() + 1,
|
|
|
+ response.getNMTokenMasterKey().getKeyId());
|
|
|
dispatcher.await();
|
|
|
|
|
|
response = nm.nodeHeartbeat(true);
|
|
|
- Assert.assertNull(
|
|
|
+ Assert.assertNull(containerToken +
|
|
|
+ "Second heartbeat after roll-over shouldn't get any key updates!",
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNull(nmToken +
|
|
|
"Second heartbeat after roll-over shouldn't get any key updates!",
|
|
|
- response.getMasterKey());
|
|
|
+ response.getNMTokenMasterKey());
|
|
|
dispatcher.await();
|
|
|
|
|
|
// Let's force activation
|
|
|
- secretManager.activateNextMasterKey();
|
|
|
+ rm.getRMContainerTokenSecretManager().activateNextMasterKey();
|
|
|
+ rm.getRMNMTokenSecretManager().activateNextMasterKey();
|
|
|
|
|
|
response = nm.nodeHeartbeat(true);
|
|
|
- Assert.assertNull("Activation shouldn't cause any key updates!",
|
|
|
- response.getMasterKey());
|
|
|
+ Assert.assertNull(containerToken
|
|
|
+ + "Activation shouldn't cause any key updates!",
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNull(nmToken
|
|
|
+ + "Activation shouldn't cause any key updates!",
|
|
|
+ response.getNMTokenMasterKey());
|
|
|
dispatcher.await();
|
|
|
|
|
|
response = nm.nodeHeartbeat(true);
|
|
|
- Assert
|
|
|
- .assertNull(
|
|
|
- "Even second heartbeat after activation shouldn't get any key updates!",
|
|
|
- response.getMasterKey());
|
|
|
+ Assert.assertNull(containerToken +
|
|
|
+ "Even second heartbeat after activation shouldn't get any key updates!",
|
|
|
+ response.getContainerTokenMasterKey());
|
|
|
+ Assert.assertNull(nmToken +
|
|
|
+ "Even second heartbeat after activation shouldn't get any key updates!",
|
|
|
+ response.getNMTokenMasterKey());
|
|
|
dispatcher.await();
|
|
|
|
|
|
rm.stop();
|