View Javadoc
1   package org.melati.poem.test;
2   
3   import java.util.Enumeration;
4   
5   import org.melati.poem.AccessPoemException;
6   import org.melati.poem.Capability;
7   import org.melati.poem.Column;
8   import org.melati.poem.FieldSet;
9   import org.melati.poem.PoemTask;
10  import org.melati.poem.PoemThread;
11  import org.melati.poem.PreparedTailoredQuery;
12  import org.melati.poem.Table;
13  import org.melati.poem.util.EnumUtils;
14  
15  /**
16   * @author timp
17   * @since 22 Jan 2007
18   * 
19   */
20  public class PreparedTailoredQueryTest extends EverythingTestCase {
21  
22    public PreparedTailoredQueryTest(String name) {
23      super(name);
24    }
25  
26    protected void setUp() throws Exception {
27      super.setUp();
28    }
29  
30    protected void tearDown() throws Exception {
31      super.tearDown();
32    }
33  
34    /**
35     * Test method for {@link org.melati.poem.PreparedTailoredQuery#selection()}.
36     */
37    public void testSelection() {
38      EverythingDatabase db = (EverythingDatabase)getDb();
39      Capability spyMaster = db.getCapabilityTable().ensure("spyMaster");
40      final Capability moneyPenny = db.getCapabilityTable().ensure("moneyPenny");
41  
42      User spy = (User)db.getUserTable().newPersistent();
43      spy.setLogin("spy");
44      spy.setName("Spy");
45      spy.setPassword("spy");
46      spy.makePersistent();
47  
48      Protected spyMission = (Protected)db.getProtectedTable().newPersistent();
49      spyMission.setCanRead(moneyPenny);
50      spyMission.setCanSelect(moneyPenny);
51      spyMission.setCanWrite(moneyPenny);
52      spyMission.setCanDelete(spyMaster);
53      spyMission.setSpy(spy);
54      spyMission.setMission("impossible");
55      spyMission.setDeleted(false);
56      spyMission.makePersistent();
57  
58      Protected nullCanSelectMission = (Protected)db.getProtectedTable().newPersistent();
59      nullCanSelectMission.setCanRead(null);
60      nullCanSelectMission.setCanSelect(null);
61      nullCanSelectMission.setCanWrite(moneyPenny);
62      nullCanSelectMission.setCanDelete(spyMaster);
63      nullCanSelectMission.setSpy(spy);
64      nullCanSelectMission.setMission("impossible");
65      nullCanSelectMission.setDeleted(false);
66      nullCanSelectMission.makePersistent();
67      
68      final Column<?> canReadColumn = db.getProtectedTable().getCanReadColumn();
69      final PreparedTailoredQuery ptq = new PreparedTailoredQuery(
70              new Column[] { canReadColumn }, new Table[0], canReadColumn
71                      .fullQuotedName()
72                      + "=" + moneyPenny.getTroid(), null);
73      assertEquals(new Integer(1), new Integer(EnumUtils
74              .vectorOf(ptq.selection()).size()));
75      Enumeration<FieldSet> en = ptq.selection();
76      while (en.hasMoreElements()) {
77        Object ne = en.nextElement();
78        System.err.println("FieldSet:" + ne);
79      }
80  
81      PoemTask readAsGuest = new PoemTask() {
82        public void run() {
83          try {
84            Enumeration<FieldSet> en2 = ptq.selection();
85            assertEquals(new Integer(1), new Integer(EnumUtils.vectorOf(en2)
86                    .size()));
87            en2 = ptq.selection();
88            while (en2.hasMoreElements()) {
89              System.err.println(en2.nextElement());
90            }
91            fail("Should have blown up");
92          } catch (AccessPoemException e) {
93            e = null;
94          }
95  
96        }
97      };
98  
99      PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest);
100 
101     final Column<?> missionColumn = db.getProtectedTable().getMissionColumn();
102     assertEquals("moneyPenny", spyMission.getCanRead().getName());
103     final PreparedTailoredQuery ptq2 = new PreparedTailoredQuery(new Column[] {
104         missionColumn, db.getUserTable().getPasswordColumn() },
105             new Table[] { db.getUserTable() }, missionColumn.fullQuotedName()
106                     + " = 'impossible' AND "
107                     + db.getProtectedTable().getSpyColumn().fullQuotedName()
108                     + " = " + db.getUserTable().troidColumn().fullQuotedName(),
109             null);
110     PoemTask readAsGuest2 = new PoemTask() {
111       public void run() {
112         Enumeration<FieldSet> en2 = ptq2.selection();
113         try {
114         assertEquals(2, EnumUtils.vectorOf(en2).size());
115           en2 = ptq2.selection();
116           while (en2.hasMoreElements()) {
117             FieldSet tuple = (FieldSet)en2.nextElement();
118             System.err.println(tuple);
119           }
120           fail("Should have blown up");
121         } catch (AccessPoemException e) {
122           e = null;
123         }
124 
125       }
126     };
127 
128     PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
129 
130     // Now remove row's capability and set Users capability;
131     // (as Protected does not get checked in {@link
132     // TailoredResultSetEnumeration}).
133     spyMission.setCanRead(null);
134     db.getUserTable().getTableInfo().setDefaultcanread(moneyPenny);
135 
136     try {
137       PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
138     } catch (AccessPoemException e) {
139       e = null;
140     }
141 
142     // Check that table level protection is used if row level is missing
143     db.getProtectedTable().getTableInfo().setDefaultcanread(moneyPenny);
144     try {
145       PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
146     } catch (AccessPoemException e) {
147       e = null;
148     }
149 
150     // cleanup
151     db.getProtectedTable().getTableInfo().setDefaultcanread(null);
152     db.getUserTable().getTableInfo().setDefaultcanread(null);
153     spyMission.delete();
154     nullCanSelectMission.delete();
155     spy.delete();
156     spyMaster.delete();
157     moneyPenny.delete();
158 
159   }
160 
161   /**
162    * Test method for
163    * {@link org.melati.poem.PreparedTailoredQuery#selection_firstRaw()}.
164    */
165   public void testSelection_firstRaw() {
166 
167   }
168 
169   /**
170    * Test method for
171    * {@link org.melati.poem.PreparedTailoredQuery#
172    * PreparedTailoredQuery(java.lang.String, org.melati.poem.Column[], 
173    *       org.melati.poem.Table[], java.lang.String, java.lang.String)}.
174    */
175   public void testPreparedTailoredQueryStringColumnArrayTableArrayStringString() {
176 
177   }
178 
179   /**
180    * Test method for
181    * {@link org.melati.poem.PreparedTailoredQuery#PreparedTailoredQuery(org.melati.poem.Column[], org.melati.poem.Table[], java.lang.String, java.lang.String)}.
182    */
183   public void testPreparedTailoredQueryColumnArrayTableArrayStringString() {
184 
185   }
186 
187   /**
188    * Test method for
189    * {@link org.melati.poem.TailoredQuery#TailoredQuery(org.melati.poem.Column[], org.melati.poem.Table[], java.lang.String, java.lang.String)}.
190    */
191   public void testTailoredQueryColumnArrayTableArrayStringString() {
192 
193   }
194 
195   /**
196    * Test method for
197    * {@link org.melati.poem.TailoredQuery#TailoredQuery(java.lang.String, org.melati.poem.Column[], org.melati.poem.Table[], java.lang.String, java.lang.String)}.
198    */
199   public void testTailoredQueryStringColumnArrayTableArrayStringString() {
200 
201   }
202 
203   /**
204    * Test method for {@link org.melati.poem.TailoredQuery#toString()}.
205    */
206   public void testToString() {
207 
208   }
209 
210 }