package com.hivemq.spi.security;
import com.google.common.collect.Lists;
import com.hivemq.spi.callback.security.authorization.AuthorizationBehaviour;
import com.hivemq.spi.callback.security.authorization.AuthorizationResult;
import com.hivemq.spi.message.QoS;
import com.hivemq.spi.topic.MqttTopicPermission;
import org.junit.Test;
import java.util.List;
import static com.hivemq.spi.callback.security.authorization.AuthorizationBehaviour.*;
import static com.hivemq.spi.topic.MqttTopicPermission.*;
import static org.junit.Assert.assertEquals;
/**
* @author Christoph Schäbel
*/
public class AuthorizationEvaluatorTest {
@Test
public void test_publish_empty_list() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList();
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_publish_null_list() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return null;
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_publish_accept() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/1/#", TYPE.ALLOW)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return DENY;
}
};
assertEquals(ACCEPT, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_publish_default() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/2/#", TYPE.ALLOW),
new MqttTopicPermission("test/3/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_publish_match_multi() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/2/#", TYPE.DENY),
new MqttTopicPermission("test/3/#", TYPE.DENY),
new MqttTopicPermission("test/1/#", TYPE.ALLOW),
new MqttTopicPermission("test/3/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return DENY;
}
};
assertEquals(ACCEPT, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_publish_deny() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/1/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return ACCEPT;
}
};
assertEquals(DENY, AuthorizationEvaluator.checkPublish("test/1/2/3", QoS.AT_LEAST_ONCE, false, authResult));
}
@Test
public void test_subscribe_empty_list() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList();
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
@Test
public void test_subscribe_null_list() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return null;
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
@Test
public void test_subscribe_accept() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/1/#", TYPE.ALLOW)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return DENY;
}
};
assertEquals(ACCEPT, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
@Test
public void test_subscribe_default() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/2/#", TYPE.ALLOW),
new MqttTopicPermission("test/3/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return NEXT;
}
};
assertEquals(NEXT, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
@Test
public void test_subscribe_match_multi() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/2/#", TYPE.DENY),
new MqttTopicPermission("test/3/#", TYPE.DENY),
new MqttTopicPermission("test/1/#", TYPE.ALLOW),
new MqttTopicPermission("test/3/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return DENY;
}
};
assertEquals(ACCEPT, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
@Test
public void test_subscribe_deny() throws Exception {
final AuthorizationResult authResult = new AuthorizationResult() {
@Override
public List<MqttTopicPermission> getMqttTopicPermissions() {
return Lists.newArrayList(
new MqttTopicPermission("test/1/#", TYPE.DENY)
);
}
@Override
public AuthorizationBehaviour getDefaultBehaviour() {
return ACCEPT;
}
};
assertEquals(DENY, AuthorizationEvaluator.checkSubscription("test/1/2/3", QoS.AT_LEAST_ONCE, authResult));
}
}