ftp_directory_listing_parser_netware_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis// Copyright (c) 2011 The Chromium Authors. All rights reserved.
277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// Use of this source code is governed by a BSD-style license that can be
377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// found in the LICENSE file.
477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "net/ftp/ftp_directory_listing_parser_unittest.h"
677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "base/format_macros.h"
877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "base/string_util.h"
977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "base/stringprintf.h"
10b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek#include "base/utf_string_conversions.h"
11d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis#include "net/ftp/ftp_directory_listing_parser_netware.h"
12b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek
1377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremeneknamespace net {
1477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
1577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremeneknamespace {
16d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis
17d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidistypedef FtpDirectoryListingParserTest FtpDirectoryListingParserNetwareTest;
18d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek
199b663716449b618ba0390b1dbebc54fa8e971124Ted KremenekTEST_F(FtpDirectoryListingParserNetwareTest, Good) {
209b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek  const struct SingleLineTestData good_cases[] = {
219b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek    { "d [RWCEAFMS] ftpadmin 512 Jan 29  2004 pub",
229b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek      FtpDirectoryListingEntry::DIRECTORY, "pub", -1,
239b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek      2004, 1, 29, 0, 0 },
249b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek    { "- [RW------] ftpadmin 123 Nov 11  18:25 afile",
25c0c3f5dbc9e78aa53a86c7d5e3eeda23ddad93d6Ted Kremenek      FtpDirectoryListingEntry::FILE, "afile", 123,
26f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroff      1994, 11, 11, 18, 25 },
27bb141217871e93767aa3f2de1b9946fa6d37066aZhongxing Xu    { "d [RWCEAFMS] daniel 512 May 17  2010 NVP anyagok",
284beaa9f51b2da57c64740cef2bd1c2fdb0c325d5Ted Kremenek      FtpDirectoryListingEntry::DIRECTORY, "NVP anyagok", -1,
2977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek      2010, 5, 17, 0, 0 },
301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  };
315a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis  for (size_t i = 0; i < arraysize(good_cases); i++) {
325a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
335a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis                                    good_cases[i].input));
349ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek
355a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis    std::vector<base::string16> lines(
365e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramer        GetSingleLineTestCase(good_cases[i].input));
37f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroff
38d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis    // The parser requires a "total n" line before accepting regular input.
3925e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu    lines.insert(lines.begin(), ASCIIToUTF16("total 1"));
4025e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu
41d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis    std::vector<FtpDirectoryListingEntry> entries;
421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    EXPECT_TRUE(ParseFtpDirectoryListingNetware(lines,
43b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek                                                GetMockCurrentTime(),
44031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu                                                &entries));
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    VerifySingleLineTestCase(good_cases[i], entries);
46d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis  }
47b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek}
48d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis
491eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpTEST_F(FtpDirectoryListingParserNetwareTest, Bad) {
50b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek  const char* bad_cases[] = {
514adc81e540b874bafa15715fd2c5cb662463debdTed Kremenek    " foo",
52cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek    "garbage",
53b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek    "d [] ftpadmin 512 Jan 29  2004 pub",
54b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek    "d [XGARBAGE] ftpadmin 512 Jan 29  2004 pub",
551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    "d [RWCEAFMS] 512 Jan 29  2004 pub",
56846eabd187be4bfe992e8bca131166b734d86e0dTed Kremenek    "d [RWCEAFMS] ftpadmin -1 Jan 29  2004 pub",
57846eabd187be4bfe992e8bca131166b734d86e0dTed Kremenek    "l [RW------] ftpadmin 512 Jan 29  2004 pub",
581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  };
59846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek  for (size_t i = 0; i < arraysize(bad_cases); i++) {
60031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
61846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek                                    bad_cases[i]));
62846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek
630d093d3005dd583675a45a85bd688063572cc8afTed Kremenek    std::vector<base::string16> lines(GetSingleLineTestCase(bad_cases[i]));
641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    // The parser requires a "total n" line before accepting regular input.
660a3ed3143b00f237decb1288c1ff574ae09eba4eTed Kremenek    lines.insert(lines.begin(), ASCIIToUTF16("total 1"));
670a3ed3143b00f237decb1288c1ff574ae09eba4eTed Kremenek
681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    std::vector<FtpDirectoryListingEntry> entries;
69e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek    EXPECT_FALSE(ParseFtpDirectoryListingNetware(lines,
70e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek                                                 GetMockCurrentTime(),
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                                                 &entries));
72e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek  }
73e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek}
74e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek
751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}  // namespace
769e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek
779e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek}  // namespace net
78d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis