001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.net.ftp.parser;
018    
019    import java.util.ArrayList;
020    import java.util.List;
021    
022    import junit.framework.TestSuite;
023    
024    import org.apache.commons.net.ftp.FTPFile;
025    import org.apache.commons.net.ftp.FTPFileEntryParser;
026    
027    /**
028     * Changed on August 31, 2006<br/>
029     * Test suite addapted to new MVSFTPEntryParser.java.
030     * @author <a href="mailto:henrik.sorensen@balcab.ch">Henrik Sorensen</a>
031     * 
032     * Created on Apr 6, 2005<br/>
033     * @author <a href="mailto:wnoto@openfinance.com">William Noto</a>
034     * @version $Id: MVSFTPEntryParserTest.java,v 1.16 2005/01/02 03:17:50 scohen Exp $
035     */
036    public class MVSFTPEntryParserTest extends FTPParseTestFramework {
037    
038        private static final String[] goodsamplesDatasetList = { /* Note, if the string begins with SAVE, the parsed entry is stored in the List saveftpfiles */
039                //  "Volume Unit    Referred Ext Used Recfm Lrecl BlkSz Dsorg Dsname",
040                "SAVE00 3390   2004/06/23  1    1  FB     128  6144  PS    INCOMING.RPTBM023.D061704",
041                "SAVE01 3390   2004/06/23  1    1  FB     128  6144  PO    INCOMING.RPTBM024.D061704",
042                "SAVE02 3390   2004/06/23  1    1  FB     128  6144  PO-E  INCOMING.RPTBM025.D061704",
043                "PSMLC1 3390   2005/04/04  1    1  VB   27994 27998  PS    file3.I",
044                "PSMLB9 3390   2005/04/04  1    1  VB   27994 27998  PS    file4.I.BU",
045                "PSMLB6 3390   2005/04/05  1    1  VB   27994 27998  PS    file3.I.BU",
046                "PSMLC6 3390   2005/04/05  1    1  VB   27994 27998  PS    file6.I",
047                "PSMLB7 3390   2005/04/04  1    1  VB   27994 27998  PS    file7.O",
048                "PSMLC6 3390   2005/04/05  1    1  VB   27994 27998  PS    file7.O.BU",
049                "FPFS49 3390   2004/06/23  1    1  FB     128  6144  PO-E  INCOMING.RPTBM026.D061704",
050                "FPFS41 3390   2004/06/23  1    1  FB     128  6144  PS    INCOMING.RPTBM056.D061704",
051                "FPFS25 3390   2004/06/23  1    1  FB     128  6144  PS    INCOMING.WTM204.D061704", };
052    
053        private static final String[] goodsamplesMemberList = {/* Note, if the string begins with SAVE, the parsed entry is stored in the List saveftpfiles */
054                "Name      VV.MM   Created       Changed      Size  Init   Mod   Id",
055                "SAVE03    01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001",
056                "SAVE04                                                              ", // no statistics
057                "TBSHELF1  01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001",
058                "TBSHELF2  01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001",
059                "TBSHELF3  01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001",
060                "TBSHELF4  01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001", };
061    
062        private static final String[] goodsamplesJES1List = { /* no header for JES1 (JES Interface level 1) */
063        /* Note, if the string begins with SAVE, the parsed entry is stored in the List saveftpfiles */
064        "IBMUSER1  JOB01906  OUTPUT    3 Spool Files", };
065    
066        private static final String[] goodsamplesJES2List = { /* JES2 (JES Interface level 2) */
067                /* Note, if the string begins with SAVE, the parsed entry is stored in the List saveftpfiles */
068                //"JOBNAME  JOBID    OWNER    STATUS CLASS",
069                "IBMUSER2 JOB01906 IBMUSER  OUTPUT A        RC=0000 3 spool files",
070                "IBMUSER  TSU01830 IBMUSER  OUTPUT TSU      ABEND=522 3 spool files", };
071    
072        private static final String[] badsamples = {
073                "MigratedP201.$FTXPBI1.$CF2ITB.$AAB0402.I",
074                "PSMLC133902005/04/041VB2799427998PSfile1.I", "file2.O", };
075    
076        /**
077         * @see junit.framework.TestCase#TestCase(String)
078         */
079        public MVSFTPEntryParserTest(String name) {
080            super(name);
081    
082        }
083    
084        /* (non-Javadoc)
085         * @see org.apache.commons.net.ftp.parser.CompositeFTPParseTestFramework#getBadListings()
086         */
087        @Override
088        protected String[] getBadListing() {
089            return badsamples;
090        }
091    
092        /* (non-Javadoc)
093         * @see org.apache.commons.net.ftp.parser.CompositeFTPParseTestFramework#getGoodListings()
094         */
095        @Override
096        protected String[] getGoodListing() {
097            return goodsamplesDatasetList;
098        }
099    
100        /**
101         * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getAllGoodListings()
102         */
103        protected List<String[]> getAllGoodListings() {
104            List<String[]> l = new ArrayList<String[]>();
105            l.add(goodsamplesDatasetList);
106            l.add(goodsamplesMemberList);
107            l.add(goodsamplesJES1List);
108            l.add(goodsamplesJES2List);
109    
110            return l;
111        }
112    
113    
114        /**
115         * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getParser()
116         */
117        @Override
118        protected FTPFileEntryParser getParser() {
119            return new MVSFTPEntryParser();
120        }
121    
122        /**
123         * Method suite.
124         * 
125         * @return TestSuite
126         */
127        public static TestSuite suite() {
128            return (new TestSuite(MVSFTPEntryParserTest.class));
129        }
130    
131        /* 
132         * note the testGoodListing has to be the first test invoked, because 
133         * some FTPFile entries are saved for the later tests
134         * 
135         * (non-Javadoc)
136         * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testGoodListing()
137         */
138        @Override
139        public void testGoodListing() throws Exception {
140            String[] goodsamples = getGoodListing();
141            MVSFTPEntryParser parser = new MVSFTPEntryParser();
142            parser.setType(MVSFTPEntryParser.FILE_LIST_TYPE);
143            parser.setRegex(MVSFTPEntryParser.FILE_LIST_REGEX);
144            for (String test : goodsamples) {
145                FTPFile f = parser.parseFTPEntry(test);
146                assertNotNull("Failed to parse " + test, f);
147                doAdditionalGoodTests(test, f);
148            }
149        }
150    
151        public void testMemberListing() throws Exception {
152            MVSFTPEntryParser parser = new MVSFTPEntryParser();
153            parser.setType(MVSFTPEntryParser.MEMBER_LIST_TYPE);
154            parser.setRegex(MVSFTPEntryParser.MEMBER_LIST_REGEX);
155            for (String test : goodsamplesMemberList) {
156                FTPFile f = parser.parseFTPEntry(test);
157                assertNotNull("Failed to parse " + test, f);
158                doAdditionalGoodTests(test, f);
159            }
160        }
161    
162        public void testJesLevel1Listing() {
163            MVSFTPEntryParser parser = new MVSFTPEntryParser();
164            parser.setType(MVSFTPEntryParser.JES_LEVEL_1_LIST_TYPE);
165            parser.setRegex(MVSFTPEntryParser.JES_LEVEL_1_LIST_REGEX);
166            for (String test : goodsamplesJES1List) {
167                FTPFile f = parser.parseFTPEntry(test);
168                assertNotNull("Failed to parse " + test, f);
169                doAdditionalGoodTests(test, f);
170            }
171        }
172        
173        public void testJesLevel2Listing() {
174            MVSFTPEntryParser parser = new MVSFTPEntryParser();
175            parser.setType(MVSFTPEntryParser.JES_LEVEL_2_LIST_TYPE);
176            parser.setRegex(MVSFTPEntryParser.JES_LEVEL_2_LIST_REGEX);
177            for (String test : goodsamplesJES2List) {
178                FTPFile f = parser.parseFTPEntry(test);
179                assertNotNull("Failed to parse " + test, f);
180                doAdditionalGoodTests(test, f);
181            }
182        }
183    
184        @Override
185        public void testParseFieldsOnDirectory() throws Exception {
186            MVSFTPEntryParser parser = new MVSFTPEntryParser();
187            parser.setType(MVSFTPEntryParser.FILE_LIST_TYPE);
188            parser.setRegex(MVSFTPEntryParser.FILE_LIST_REGEX);
189    
190            FTPFile file = parser
191                    .parseFTPEntry("SAVE01 3390   2004/06/23  1    1  FB     128  6144  PO    INCOMING.RPTBM024.D061704");
192            assertNotNull("Could not parse entry.", file);
193            assertTrue("Should have been a directory.", file.isDirectory());
194            assertEquals("INCOMING.RPTBM024.D061704", file.getName());
195    
196            file = parser
197                    .parseFTPEntry("SAVE02 3390   2004/06/23  1    1  FB     128  6144  PO-E  INCOMING.RPTBM025.D061704");
198            assertNotNull("Could not parse entry.", file);
199            assertTrue("Should have been a directory.", file.isDirectory());
200            assertEquals("INCOMING.RPTBM025.D061704", file.getName());
201    
202        }
203    
204        /* (non-Javadoc)
205         * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnFile()
206         */
207        @Override
208        public void testParseFieldsOnFile() throws Exception {
209            FTPFile file = null;
210            
211            MVSFTPEntryParser parser = new MVSFTPEntryParser(); 
212            
213            parser.setRegex(MVSFTPEntryParser.FILE_LIST_REGEX);
214            parser.setType(MVSFTPEntryParser.FILE_LIST_TYPE);
215            
216            file = parser.parseFTPEntry("SAVE00 3390   2004/06/23  1    1  FB     128  6144  PS    INCOMING.RPTBM023.D061704");
217            assertNotNull("Could not parse entry.", file);
218            assertTrue("Should have been a file.", file.isFile());
219            assertEquals("INCOMING.RPTBM023.D061704", file.getName());
220            assertNull("Timestamp should not have been set.", file.getTimestamp());
221    
222            parser.setType(MVSFTPEntryParser.MEMBER_LIST_TYPE);
223            parser.setRegex(MVSFTPEntryParser.MEMBER_LIST_REGEX);
224            
225            file = parser.parseFTPEntry("SAVE03    01.03 2002/09/12 2002/10/11 09:37    11    11     0 KIL001");
226            assertNotNull("Could not parse entry.", file);
227            assertTrue("Should have been a file.", file.isFile());
228            assertEquals("SAVE03", file.getName());
229            assertNotNull("Timestamp should have been set.", file.getTimestamp());
230    
231            file = parser.parseFTPEntry("SAVE04                                                              ");
232            assertNotNull("Could not parse entry.", file);
233            assertTrue("Should have been a file.", file.isFile());
234            assertEquals("SAVE04", file.getName());
235            assertNull("Timestamp should not have been set.", file.getTimestamp());
236    
237        }
238    }