jaroslav@143: /* jaroslav@264: * Quoridor server and related libraries jaroslav@264: * Copyright (C) 2009-2010 Jaroslav Tulach jaroslav@143: * jaroslav@264: * This program is free software: you can redistribute it and/or modify jaroslav@264: * it under the terms of the GNU General Public License as published by jaroslav@264: * the Free Software Foundation, either version 3 of the License. jaroslav@143: * jaroslav@264: * This program is distributed in the hope that it will be useful, jaroslav@264: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@264: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@264: * GNU General Public License for more details. jaroslav@143: * jaroslav@264: * You should have received a copy of the GNU General Public License jaroslav@264: * along with this program. Look for COPYING file in the top folder. jaroslav@264: * If not, see http://www.gnu.org/licenses/. jaroslav@143: */ jaroslav@143: package cz.xelfi.quoridor.webidor; jaroslav@143: jaroslav@258: import com.sun.jersey.test.framework.WebAppDescriptor; jaroslav@258: import com.sun.jersey.test.framework.AppDescriptor; jtulach@239: import java.io.FileInputStream; jaroslav@144: import com.sun.jersey.api.client.UniformInterfaceException; jaroslav@143: import com.sun.jersey.test.framework.JerseyTest; jaroslav@143: import java.io.File; jaroslav@143: import java.io.FileOutputStream; jaroslav@143: import java.io.IOException; jaroslav@143: import java.util.Properties; jaroslav@143: import javax.ws.rs.core.MediaType; jaroslav@143: import org.junit.Test; jaroslav@143: import static org.junit.Assert.*; jaroslav@143: jaroslav@143: /** jaroslav@143: * jaroslav@143: * @author Jaroslav Tulach jaroslav@143: */ jaroslav@143: public class UsersTest extends JerseyTest { jaroslav@145: static { jaroslav@145: System.setProperty("JERSEY_HTTP_PORT", "39434"); jaroslav@145: } jaroslav@145: jaroslav@143: private File dir; jaroslav@143: jaroslav@143: @Override jaroslav@258: protected AppDescriptor configure() { jaroslav@258: try { jaroslav@258: dir = File.createTempFile("quoridor", ".dir"); jaroslav@258: dir.delete(); jaroslav@258: System.setProperty("quoridor.dir", dir.getPath()); jaroslav@258: dir.mkdirs(); jaroslav@258: File passwd = new File(dir, "passwd"); jaroslav@258: FileOutputStream os = new FileOutputStream(passwd); jaroslav@258: os.write("Jarda=heslo\n".getBytes("UTF-8")); jaroslav@258: os.close(); jaroslav@258: File usersDir = new File(dir, "users"); jaroslav@258: usersDir.mkdirs(); jaroslav@258: File fJirka = new File(usersDir, "Jirka"); jaroslav@258: { jaroslav@258: Properties p = new Properties(); jaroslav@258: p.setProperty("email", "jir@ka.cz"); jaroslav@258: p.setProperty("passwd", "pesko"); jaroslav@258: p.store(new FileOutputStream(fJirka), ""); jaroslav@258: } jaroslav@258: } catch (Exception ex) { jaroslav@258: throw new IllegalStateException(ex); jtulach@239: } jaroslav@285: return new WebAppDescriptor.Builder("cz.xelfi.quoridor.webidor.resources").contextPath("userstest").build(); jaroslav@143: } jaroslav@143: jaroslav@143: @Override jaroslav@143: public void tearDown() throws Exception { jaroslav@143: deleteRec(dir); jaroslav@143: } jaroslav@143: jaroslav@143: static void deleteRec(File dir) throws IOException { jaroslav@143: if (dir == null) { jaroslav@143: return; jaroslav@143: } jaroslav@143: File[] arr = dir.listFiles(); jaroslav@143: if (arr != null) { jaroslav@143: for (File f : arr) { jaroslav@143: deleteRec(f); jaroslav@143: } jaroslav@143: } jaroslav@143: dir.delete(); jaroslav@143: } jaroslav@143: jaroslav@143: @Test public void testListUsers() throws Exception { jaroslav@143: File usersDir = new File(dir, "users"); jaroslav@143: usersDir.mkdirs(); jaroslav@143: File fJarda = new File(usersDir, "Jarda"); jaroslav@143: { jaroslav@143: Properties p = new Properties(); jaroslav@143: p.setProperty("email", "jar@da.cz"); jaroslav@143: p.setProperty("permission.email", "true"); jaroslav@143: p.store(new FileOutputStream(fJarda), ""); jaroslav@143: } jaroslav@143: File fJirka = new File(usersDir, "Jirka"); jaroslav@143: { jaroslav@143: Properties p = new Properties(); jtulach@239: p.load(new FileInputStream(fJirka)); jaroslav@143: p.setProperty("email", "jir@ka.cz"); jaroslav@143: p.store(new FileOutputStream(fJirka), ""); jaroslav@143: } jaroslav@143: jaroslav@258: String logJarda = resource().path("login"). jaroslav@143: queryParam("name", "Jarda"). jaroslav@143: queryParam("password", "heslo"). jaroslav@143: accept(MediaType.TEXT_PLAIN). jaroslav@143: put(String.class); jaroslav@258: String logJirka = resource().path("login"). jaroslav@143: queryParam("name", "Jirka"). jaroslav@143: queryParam("password", "pesko"). jaroslav@143: accept(MediaType.TEXT_PLAIN). jaroslav@143: put(String.class); jaroslav@143: jaroslav@258: User uJirka = resource().path("users/Jirka").accept(MediaType.TEXT_XML).get(User.class); jaroslav@143: assertEquals("Jirka", uJirka.getId()); jaroslav@143: assertNull("Cannot get email without login", uJirka.getProperty("email")); jaroslav@143: jaroslav@144: jaroslav@258: uJirka = resource().path("users/Jirka").queryParam("loginID", logJirka).accept(MediaType.TEXT_XML).get(User.class); jaroslav@143: assertEquals("Jirka", uJirka.getId()); jaroslav@143: assertEquals("Email for ownself is OK", "jir@ka.cz", uJirka.getProperty("email")); jaroslav@143: jaroslav@258: uJirka = resource().path("users/Jirka").queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(User.class); jaroslav@143: assertEquals("Jirka", uJirka.getId()); jaroslav@143: assertEquals("Jarda has permission for property email", "jir@ka.cz", uJirka.getProperty("email")); jaroslav@143: jaroslav@258: String txt = resource().path("users/Jirka").queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(String.class); jaroslav@143: if (!txt.contains("jir@ka.cz")) { jaroslav@143: fail(txt); jaroslav@143: } jaroslav@144: jaroslav@144: try { jaroslav@258: resource().path("users/Jarda").queryParam("loginID", logJirka). jaroslav@144: queryParam("name", "email").queryParam("value", "ka@jir.cz").accept(MediaType.TEXT_XML).post(); jaroslav@144: fail("You cannot change email without priviledges"); jaroslav@144: } catch (UniformInterfaceException e) { jaroslav@144: // OK, not allowed jaroslav@144: } jaroslav@144: jaroslav@258: resource().path("users/Jirka").queryParam("loginID", logJirka). jaroslav@144: queryParam("name", "email").queryParam("value", "ka@jir.cz").accept(MediaType.TEXT_XML).post(); jaroslav@144: jaroslav@258: uJirka = resource().path("users/Jirka").queryParam("loginID", logJirka).accept(MediaType.TEXT_XML).get(User.class); jaroslav@144: assertEquals("Jirka", uJirka.getId()); jaroslav@144: assertEquals("Email for ownself is OK", "ka@jir.cz", uJirka.getProperty("email")); jaroslav@144: jaroslav@144: try { jaroslav@258: resource().path("users/Jirka").queryParam("loginID", logJirka). jaroslav@144: queryParam("name", "permission.email").queryParam("value", "true").accept(MediaType.TEXT_XML).post(); jaroslav@144: fail("Shall not be allowed to change own permissions"); jaroslav@144: } catch (UniformInterfaceException ex) { jaroslav@144: // OK, not allowed jaroslav@144: } jaroslav@143: } jaroslav@143: }