/*
* Copyright 2011 Splunk, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"): you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.splunk;
import org.junit.Assert;
import org.junit.Test;
import java.net.URLEncoder;
public class NamespaceTest extends SDKTestCase {
@Test
public void testStaticNamespace() {
Assert.assertEquals(
"This test is not valid when Service owner is overridden.",
null, service.getOwner());
Assert.assertEquals(
"This test is not valid when Service app is overridden.",
null, service.getApp());
Args namespace = new Args();
// syntactic tests
namespace.clear();
Assert.assertEquals("/services/",
service.fullpath("", null));
namespace.clear();
namespace.put("owner", "bill@some domain\u0150");
namespace.put("app", "my! app!@");
Assert.assertEquals("/servicesNS/bill%40some+domain%C5%90/my%21+app%21%40/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/Bob/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("app", "search");
Assert.assertEquals("/servicesNS/-/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("app", "search");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/Bob/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "user");
Assert.assertEquals("/servicesNS/-/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "user");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/Bob/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "user");
namespace.put("app", "search");
Assert.assertEquals("/servicesNS/-/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "user");
namespace.put("app", "search");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/Bob/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "app");
Assert.assertEquals("/servicesNS/nobody/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "app");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "app");
namespace.put("app", "search");
Assert.assertEquals("/servicesNS/nobody/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "app");
namespace.put("app", "search");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "global");
Assert.assertEquals("/servicesNS/nobody/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "global");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/-/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "global");
namespace.put("app", "search");
Assert.assertEquals("/servicesNS/nobody/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "global");
namespace.put("app", "search");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/search/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "system");
Assert.assertEquals("/servicesNS/nobody/system/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "system");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/system/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "system");
namespace.put("app", "search");
Assert.assertEquals("/servicesNS/nobody/system/",
service.fullpath("", namespace));
namespace.clear();
namespace.put("sharing", "system");
namespace.put("app", "search");
namespace.put("owner", "Bob");
Assert.assertEquals("/servicesNS/nobody/system/",
service.fullpath("", namespace));
}
@Test
public void testLiveNamespace1() throws Exception {
String username = "sdk-user@somedomain!";
String password = "changeme!";
String savedSearch = "sdk-test1";
String searchString = "search index=main * | head 10";
// Setup a namespace
Args namespace = new Args();
namespace.put("owner", username);
namespace.put("app", "search");
// get all users, scrub and make our test user
UserCollection users = service.getUsers();
if (users.containsKey(username))
users.remove(username);
Assert.assertFalse(users.containsKey(username));
users.create(username, password, "user");
Assert.assertTrue(users.containsKey(username));
// get saved searches for our new namespace, clean to make sure
// we remove, before we create one.
SavedSearchCollection savedSearches =
service.getSavedSearches(namespace);
if (savedSearches.containsKey(savedSearch))
savedSearches.remove(savedSearch);
Assert.assertFalse(savedSearches.containsKey(savedSearch));
savedSearches.create(savedSearch, searchString);
Assert.assertTrue(savedSearches.containsKey(savedSearch));
// remove saved search
savedSearches.remove(savedSearch);
Assert.assertFalse(savedSearches.containsKey(savedSearch));
// remove user
users.remove(username);
Assert.assertFalse(users.containsKey(username));
}
// Check that a saved search created in one user namespace is invisible in another.
@Test
public void testNamespaceVisibility() {
final String savedSearchName = createTemporaryName();
final String query = "search *";
final String user = "admin";
final String app = "search";
Args namespace = new Args();
namespace.put("owner", user);
namespace.put("app", app);
Args otherUserNamespace = new Args();
otherUserNamespace.put("owner", user);
otherUserNamespace.put("app", "launcher");
Args appNamespace = new Args();
appNamespace.put("owner", "nobody");
appNamespace.put("app", app);
Args wildcardUserNamespace = new Args();
wildcardUserNamespace.put("owner", "-");
wildcardUserNamespace.put("app", app);
try {
SavedSearch ss = service.getSavedSearches(namespace).create(savedSearchName, query);
Assert.assertTrue(service.getSavedSearches(namespace).containsKey(savedSearchName));
Assert.assertFalse(service.getSavedSearches(otherUserNamespace).containsKey(savedSearchName));
Assert.assertFalse(service.getSavedSearches(appNamespace).containsKey(savedSearchName));
Assert.assertTrue(service.getSavedSearches(wildcardUserNamespace).containsKey(savedSearchName));
} finally {
if (service.getSavedSearches(namespace).containsKey(savedSearchName)) {
service.getSavedSearches(namespace).remove(savedSearchName);
}
}
}
@Test
public void testNamespaceConflicts() {
final String user = "admin";
final String app1 = "search";
final String app2 = "launcher";
Args namespace1 = new Args();
namespace1.put("owner", user);
namespace1.put("app", app1);
Args namespace2 = new Args();
namespace2.put("owner", user);
namespace2.put("app", app2);
Args wildcardNamespace = new Args();
wildcardNamespace.put("owner", user);
wildcardNamespace.put("app", "-");
final String savedSearchName = createTemporaryName();
final String query1 = "search * | head 1";
final String query2 = "search * | head 2";
try {
SavedSearch ss1 = service.getSavedSearches(namespace1).create(savedSearchName, query1);
SavedSearch ss2 = service.getSavedSearches(namespace2).create(savedSearchName, query2);
Assert.assertEquals(query1, service.getSavedSearches(namespace1).get(savedSearchName).getSearch());
Assert.assertEquals(query2, service.getSavedSearches(namespace2).get(savedSearchName).getSearch());
try {
service.getSavedSearches(wildcardNamespace).get(savedSearchName).getSearch();
Assert.fail("Expected SplunkException about multiple keys.");
} catch (SplunkException e) {
}
} finally {
if (service.getSavedSearches(namespace1).containsKey(savedSearchName)) {
service.getSavedSearches(namespace1).remove(savedSearchName);
}
if (service.getSavedSearches(namespace2).containsKey(savedSearchName)) {
service.getSavedSearches(namespace2).remove(savedSearchName);
}
}
}
}