webidor/src/test/java/cz/xelfi/quoridor/webidor/FinishedGameTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 20 Aug 2011 17:14:23 +0200
branchglassfish
changeset 285 bc4ddef89763
parent 264 d60370059c3c
permissions -rw-r--r--
Adjusting tests to use different path
jaroslav@57
     1
/*
jaroslav@264
     2
 * Quoridor server and related libraries
jaroslav@264
     3
 * Copyright (C) 2009-2010 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@57
     4
 *
jaroslav@264
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@264
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@264
     7
 * the Free Software Foundation, either version 3 of the License.
jaroslav@57
     8
 *
jaroslav@264
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@264
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@264
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@264
    12
 * GNU General Public License for more details.
jaroslav@57
    13
 *
jaroslav@264
    14
 * You should have received a copy of the GNU General Public License
jaroslav@264
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@264
    16
 * If not, see http://www.gnu.org/licenses/.
jaroslav@57
    17
 */
jaroslav@57
    18
jaroslav@57
    19
package cz.xelfi.quoridor.webidor;
jaroslav@57
    20
jaroslav@258
    21
import com.sun.jersey.test.framework.WebAppDescriptor;
jaroslav@258
    22
import com.sun.jersey.test.framework.AppDescriptor;
jtulach@238
    23
import java.util.Properties;
jaroslav@128
    24
import com.sun.jersey.api.client.GenericType;
jaroslav@162
    25
import com.sun.jersey.api.client.UniformInterfaceException;
jaroslav@57
    26
import com.sun.jersey.test.framework.JerseyTest;
jaroslav@57
    27
import java.io.File;
jtulach@82
    28
import java.io.FileOutputStream;
jaroslav@57
    29
import java.io.IOException;
jaroslav@128
    30
import java.util.List;
jaroslav@57
    31
import javax.ws.rs.core.MediaType;
jaroslav@57
    32
import org.junit.Test;
jaroslav@57
    33
import static org.junit.Assert.*;
jaroslav@57
    34
jaroslav@57
    35
/**
jaroslav@57
    36
 *
jaroslav@57
    37
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@57
    38
 */
jaroslav@57
    39
public class FinishedGameTest extends JerseyTest {
jaroslav@149
    40
    static {
jaroslav@149
    41
        System.setProperty("JERSEY_HTTP_PORT", "33435");
jaroslav@149
    42
    }
jaroslav@57
    43
    private File dir;
jaroslav@258
    44
    
jaroslav@57
    45
    @Override
jaroslav@258
    46
    protected AppDescriptor configure() {
jaroslav@258
    47
        try {
jaroslav@258
    48
            dir = File.createTempFile("quoridor", ".dir");
jaroslav@258
    49
            dir.delete();
jaroslav@258
    50
            System.setProperty("quoridor.dir", dir.getPath());
jaroslav@258
    51
            dir.mkdirs();
jaroslav@258
    52
            File passwd = new File(dir, "passwd");
jaroslav@258
    53
            FileOutputStream os = new FileOutputStream(passwd);
jaroslav@258
    54
            os.write("Jarda=heslo\nJirka=pesko\nMaster=mr\n".getBytes("UTF-8"));
jaroslav@258
    55
            os.close();
jaroslav@258
    56
        } catch (Exception ex) {
jaroslav@258
    57
            throw new IllegalStateException(ex);
jaroslav@258
    58
        }
jaroslav@285
    59
        return new WebAppDescriptor.Builder("cz.xelfi.quoridor.webidor.resources").contextPath("finishedGame").build();
jaroslav@57
    60
    }
jaroslav@57
    61
jaroslav@57
    62
    @Override
jaroslav@57
    63
    public void tearDown() throws Exception {
jaroslav@57
    64
        super.tearDown();
jaroslav@57
    65
        deleteRec(dir);
jaroslav@57
    66
    }
jaroslav@57
    67
jaroslav@57
    68
    static void deleteRec(File dir) throws IOException {
jaroslav@57
    69
        if (dir == null) {
jaroslav@57
    70
            return;
jaroslav@57
    71
        }
jaroslav@57
    72
        File[] arr = dir.listFiles();
jaroslav@57
    73
        if (arr != null) {
jaroslav@57
    74
            for (File f : arr) {
jaroslav@57
    75
                deleteRec(f);
jaroslav@57
    76
            }
jaroslav@57
    77
        }
jaroslav@57
    78
        dir.delete();
jaroslav@57
    79
    }
jtulach@83
    80
    @Test public void testNotLoggedIn() {
jaroslav@258
    81
        String status  = resource().path("login").queryParam("id", "not-logged-in").
jtulach@83
    82
                accept(MediaType.TEXT_PLAIN).get(String.class);
jtulach@83
    83
        assertEquals("Nobody is logged in", "", status);
jtulach@83
    84
    }
jtulach@83
    85
jaroslav@57
    86
jaroslav@57
    87
    @Test public void testCreateAGame() throws Exception {
jaroslav@258
    88
        String logJarda = resource().path("login").
jtulach@82
    89
            queryParam("name", "Jarda").
jtulach@82
    90
            queryParam("password", "heslo").
jtulach@82
    91
            accept(MediaType.TEXT_PLAIN).
jtulach@82
    92
            put(String.class);
jaroslav@258
    93
        String logJirka = resource().path("login").
jtulach@82
    94
            queryParam("name", "Jirka").
jtulach@82
    95
            queryParam("password", "pesko").
jtulach@82
    96
            accept(MediaType.TEXT_PLAIN).
jtulach@82
    97
            put(String.class);
jtulach@82
    98
        assertNotNull("Logged in ok", logJarda);
jaroslav@258
    99
        GameId s = resource().path("games").queryParam("white", "Jarda")
jtulach@82
   100
                .queryParam("loginID", logJarda)
jaroslav@57
   101
                .queryParam("black", "Jirka").post(GameId.class);
jaroslav@57
   102
jaroslav@57
   103
        for (int i = 0; i < 3; i++) {
jaroslav@258
   104
            resource().path("games/" + s.getId())
jtulach@82
   105
                .queryParam("loginID", logJarda)
jtulach@82
   106
                .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
jaroslav@258
   107
            resource().path("games/" + s.getId())
jtulach@82
   108
                .queryParam("loginID", logJirka)
jtulach@82
   109
                .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class);
jaroslav@57
   110
        }
jaroslav@57
   111
jaroslav@258
   112
        resource().path("games/" + s.getId())
jtulach@82
   113
            .queryParam("loginID", logJarda)
jtulach@82
   114
            .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
jaroslav@258
   115
        resource().path("games/" + s.getId())
jtulach@82
   116
            .queryParam("loginID", logJirka)
jtulach@82
   117
            .queryParam("player", "Jirka").queryParam("move", "SS").put(GameId.class);
jaroslav@57
   118
jaroslav@128
   119
        
jaroslav@128
   120
        GenericType<List<GameId>> gType = new GenericType<List<GameId>>() {};
jaroslav@258
   121
        List<GameId> nothing = resource().path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType);
jaroslav@128
   122
        assertTrue("Nothing has been finished yet: " + nothing, nothing.isEmpty());
jaroslav@128
   123
jaroslav@57
   124
        for (int i = 0; i < 3; i++) {
jaroslav@258
   125
            resource().path("games/" + s.getId())
jtulach@82
   126
                .queryParam("loginID", logJarda)
jtulach@82
   127
                .queryParam("player", "Jarda").queryParam("move", "N").put(GameId.class);
jaroslav@258
   128
            resource().path("games/" + s.getId())
jtulach@82
   129
                .queryParam("loginID", logJirka)
jtulach@82
   130
                .queryParam("player", "Jirka").queryParam("move", "S").put(GameId.class);
jaroslav@57
   131
        }
jaroslav@57
   132
jaroslav@128
   133
jaroslav@162
   134
        try {
jaroslav@258
   135
            Game end = resource().path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@162
   136
            fail("If the game is finished, one cannot get its status without login");
jaroslav@162
   137
        } catch (UniformInterfaceException ex) {
jaroslav@162
   138
            // OK
jaroslav@162
   139
        }
jaroslav@258
   140
        Game end = resource().path("games/" + s.getId()).queryParam("loginID", logJirka).accept(MediaType.TEXT_XML).get(Game.class);
jtulach@77
   141
        assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus());
jaroslav@128
   142
jaroslav@140
   143
        assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer());
jaroslav@140
   144
jaroslav@258
   145
        List<GameId> none = resource().path("games/").queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType);
jtulach@166
   146
        assertEquals("No games, for not logged in users: " + none, 0, none.size());
jaroslav@128
   147
jaroslav@258
   148
        List<GameId> something = resource().path("games/").queryParam("loginID", logJirka).queryParam("status", "blackWon").accept(MediaType.TEXT_XML).get(gType);
jaroslav@128
   149
        assertEquals("One game finished: " + something, 1, something.size());
jaroslav@128
   150
        assertEquals("Id is OK", end.getId().getId(), something.get(0).getId());
jaroslav@57
   151
    }
jaroslav@57
   152
jtulach@75
   153
    @Test public void testResignAGame() throws Exception {
jaroslav@258
   154
        String logJarda = resource().path("login").
jtulach@82
   155
            queryParam("name", "Jarda").
jtulach@82
   156
            queryParam("password", "heslo").
jtulach@82
   157
            accept(MediaType.TEXT_PLAIN).
jtulach@82
   158
            put(String.class);
jaroslav@258
   159
        GameId s = resource().path("games").queryParam("white", "Jarda")
jtulach@82
   160
                .queryParam("loginID", logJarda)
jtulach@75
   161
                .queryParam("black", "Jirka").post(GameId.class);
jtulach@75
   162
jaroslav@162
   163
        assertTrue("In progress", s.getStatus().isInProgress());
jaroslav@162
   164
jaroslav@258
   165
        resource().path("games/" + s.getId()).
jtulach@82
   166
            queryParam("loginID", logJarda).
jtulach@82
   167
            queryParam("player", "Jarda").
jtulach@82
   168
            queryParam("move", "RESIGN").put(GameId.class);
jaroslav@162
   169
        try {
jaroslav@258
   170
            Game end = resource().path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@162
   171
            fail("Should not be able to get game when finished");
jaroslav@162
   172
        } catch (UniformInterfaceException ex) {
jaroslav@162
   173
            // OK
jaroslav@162
   174
        }
jaroslav@258
   175
        Game end = resource().path("games/" + s.getId()).queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(Game.class);
jtulach@77
   176
        assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus());
jaroslav@140
   177
        assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer());
jaroslav@162
   178
jaroslav@162
   179
        assertFalse("is finished", end.getId().getStatus().isInProgress());
jtulach@75
   180
    }
jtulach@75
   181
jaroslav@178
   182
    @Test public void testResignBGame() throws Exception {
jaroslav@258
   183
        String logJarda = resource().path("login").
jaroslav@178
   184
            queryParam("name", "Jarda").
jaroslav@178
   185
            queryParam("password", "heslo").
jaroslav@178
   186
            accept(MediaType.TEXT_PLAIN).
jaroslav@178
   187
            put(String.class);
jaroslav@258
   188
        String logJirka = resource().path("login").
jaroslav@178
   189
            queryParam("name", "Jirka").
jaroslav@178
   190
            queryParam("password", "pesko").
jaroslav@178
   191
            accept(MediaType.TEXT_PLAIN).
jaroslav@178
   192
            put(String.class);
jaroslav@178
   193
jaroslav@258
   194
        GameId s = resource().path("games").queryParam("white", "Jarda")
jaroslav@178
   195
                .queryParam("loginID", logJarda)
jaroslav@178
   196
                .queryParam("black", "Jirka").post(GameId.class);
jaroslav@178
   197
jaroslav@178
   198
        assertTrue("In progress", s.getStatus().isInProgress());
jaroslav@178
   199
jaroslav@258
   200
        resource().path("games/" + s.getId()).
jaroslav@178
   201
            queryParam("loginID", logJarda).
jaroslav@178
   202
            queryParam("player", "Jarda").
jaroslav@178
   203
            queryParam("move", "N").put(GameId.class);
jaroslav@258
   204
        resource().path("games/" + s.getId()).
jaroslav@178
   205
            queryParam("loginID", logJirka).
jaroslav@178
   206
            queryParam("player", "Jirka").
jaroslav@178
   207
            queryParam("move", "RESIGN").put(GameId.class);
jaroslav@178
   208
jaroslav@178
   209
jaroslav@178
   210
        try {
jaroslav@258
   211
            Game end = resource().path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@178
   212
            fail("Should not be able to get game when finished");
jaroslav@178
   213
        } catch (UniformInterfaceException ex) {
jaroslav@178
   214
            // OK
jaroslav@178
   215
        }
jaroslav@258
   216
        Game end = resource().path("games/" + s.getId()).queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@178
   217
        assertEquals("WhiteWins", GameStatus.whiteWon, end.getId().getStatus());
jaroslav@178
   218
        assertEquals("Jarda wins", "Jarda", end.getCurrentPlayer());
jaroslav@178
   219
jaroslav@178
   220
        assertFalse("is finished", end.getId().getStatus().isInProgress());
jaroslav@178
   221
    }
jaroslav@178
   222
jtulach@238
   223
    @Test public void testResignForeignGame() throws Exception {
jaroslav@258
   224
        String logJarda = resource().path("login").
jtulach@238
   225
            queryParam("name", "Jarda").
jtulach@238
   226
            queryParam("password", "heslo").
jtulach@238
   227
            accept(MediaType.TEXT_PLAIN).
jtulach@238
   228
            put(String.class);
jaroslav@258
   229
        GameId s = resource().path("games").queryParam("white", "Jarda")
jtulach@238
   230
                .queryParam("loginID", logJarda)
jtulach@238
   231
                .queryParam("black", "Jirka").post(GameId.class);
jtulach@238
   232
        File usersDir = new File(dir, "users");
jtulach@238
   233
        usersDir.mkdirs();
jtulach@238
   234
        File Master = new File(usersDir, "Master");
jtulach@238
   235
        {
jtulach@238
   236
            Properties p = new Properties();
jtulach@238
   237
            p.setProperty("email", "mas@ter.cz");
jtulach@238
   238
            p.setProperty("permission.resign", "true");
jtulach@238
   239
            p.store(new FileOutputStream(Master), "");
jtulach@238
   240
        }
jtulach@238
   241
jtulach@238
   242
        assertTrue("In progress", s.getStatus().isInProgress());
jaroslav@258
   243
        String logMaster = resource().path("login").
jtulach@238
   244
                queryParam("name", "Master").
jtulach@238
   245
                queryParam("password", "mr").
jtulach@238
   246
                accept(MediaType.TEXT_PLAIN).
jtulach@238
   247
                put(String.class);
jtulach@238
   248
jaroslav@258
   249
        resource().path("games/" + s.getId()).
jtulach@238
   250
            queryParam("loginID", logMaster).
jtulach@238
   251
            queryParam("player", "Jarda").
jtulach@238
   252
            queryParam("move", "RESIGN").put(GameId.class);
jtulach@238
   253
        try {
jaroslav@258
   254
            Game end = resource().path("games/" + s.getId()).accept(MediaType.TEXT_XML).get(Game.class);
jtulach@238
   255
            fail("Should not be able to get game when finished");
jtulach@238
   256
        } catch (UniformInterfaceException ex) {
jtulach@238
   257
            // OK
jtulach@238
   258
        }
jaroslav@258
   259
        Game end = resource().path("games/" + s.getId()).queryParam("loginID", logJarda).accept(MediaType.TEXT_XML).get(Game.class);
jtulach@238
   260
        assertEquals("BlackWins", GameStatus.blackWon, end.getId().getStatus());
jtulach@238
   261
        assertEquals("Jirka wins", "Jirka", end.getCurrentPlayer());
jtulach@238
   262
jtulach@238
   263
        assertFalse("is finished", end.getId().getStatus().isInProgress());
jtulach@238
   264
    }
jtulach@238
   265
jaroslav@57
   266
}