15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/ftp/ftp_directory_listing_parser_unittest.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h"
85e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/ftp/ftp_directory_listing_parser_netware.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef FtpDirectoryListingParserTest FtpDirectoryListingParserNetwareTest;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FtpDirectoryListingParserNetwareTest, Good) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const struct SingleLineTestData good_cases[] = {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "d [RWCEAFMS] ftpadmin 512 Jan 29  2004 pub",
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "pub", -1,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2004, 1, 29, 0, 0 },
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "- [RW------] ftpadmin 123 Nov 11  18:25 afile",
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "afile", 123,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1994, 11, 11, 18, 25 },
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "d [RWCEAFMS] daniel 512 May 17  2010 NVP anyagok",
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "NVP anyagok", -1,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      2010, 5, 17, 0, 0 },
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(good_cases); i++) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    good_cases[i].input));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::vector<base::string16> lines(
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        GetSingleLineTestCase(good_cases[i].input));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The parser requires a "total n" line before accepting regular input.
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    lines.insert(lines.begin(), base::ASCIIToUTF16("total 1"));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<FtpDirectoryListingEntry> entries;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ParseFtpDirectoryListingNetware(lines,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                GetMockCurrentTime(),
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                &entries));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    VerifySingleLineTestCase(good_cases[i], entries);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FtpDirectoryListingParserNetwareTest, Bad) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* bad_cases[] = {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    " foo",
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "garbage",
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "d [] ftpadmin 512 Jan 29  2004 pub",
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "d [XGARBAGE] ftpadmin 512 Jan 29  2004 pub",
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "d [RWCEAFMS] 512 Jan 29  2004 pub",
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "d [RWCEAFMS] ftpadmin -1 Jan 29  2004 pub",
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "l [RW------] ftpadmin 512 Jan 29  2004 pub",
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(bad_cases); i++) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bad_cases[i]));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::vector<base::string16> lines(GetSingleLineTestCase(bad_cases[i]));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The parser requires a "total n" line before accepting regular input.
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    lines.insert(lines.begin(), base::ASCIIToUTF16("total 1"));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<FtpDirectoryListingEntry> entries;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(ParseFtpDirectoryListingNetware(lines,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 GetMockCurrentTime(),
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 &entries));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
78