#
# mod-h2 test multi-resource GET via nghttp
#

import copy
import re
import sys
import time
import pytest

from datetime import datetime
from TestEnv import TestEnv
from TestHttpdConf import HttpdConf

def setup_module(module):
    print("setup_module: %s" % module.__name__)
    TestEnv.init()
    HttpdConf().add_vhost_test1().install()
    assert TestEnv.apache_restart() == 0
        
def teardown_module(module):
    print("teardown_module: %s" % module.__name__)
    assert TestEnv.apache_stop() == 0

class TestStore:

    def setup_method(self, method):
        print("setup_method: %s" % method.__name__)

    def teardown_method(self, method):
        print("teardown_method: %s" % method.__name__)
    
    # single page without any assets
    @pytest.mark.skipif(not TestEnv.has_nghttp_get_assets(), reason="no nghttp command available or nghttp ignores -a option")
    def test_006_01(self):
        url = TestEnv.mkurl("https", "test1", "/001.html")
        r = TestEnv.nghttp().assets(url,  options=[ "-Haccept-encoding: none" ])
        assert 0 == r["rv"]
        assert 1 == len(r["assets"])
        assert r["assets"] == [
            { "status": 200, "size": "251", "path" : "/001.html" }
        ]

    # single image without any assets
    @pytest.mark.skipif(not TestEnv.has_nghttp_get_assets(), reason="no nghttp command available or nghttp ignores -a option")
    def test_006_02(self):
        url = TestEnv.mkurl("https", "test1", "/002.jpg")
        r = TestEnv.nghttp().assets(url,  options=[ "-Haccept-encoding: none" ])
        assert 0 == r["rv"]
        assert 1 == len(r["assets"])
        assert r["assets"] == [
            { "status": 200, "size": "88K", "path" : "/002.jpg" }
        ]
        
    # gophertiles, yea!
    @pytest.mark.skipif(not TestEnv.has_nghttp_get_assets(), reason="no nghttp command available or nghttp ignores -a option")
    def test_006_03(self):
        url = TestEnv.mkurl("https", "test1", "/004.html")
        r = TestEnv.nghttp().assets(url, options=[ "-Haccept-encoding: none" ])
        assert 0 == r["rv"]
        assert 181 == len(r["assets"])
        assert r["assets"] == [
            { "status": 200, "size": "10K", "path": "/004.html" },
            { "status": 200, "size": "742", "path": "/004/gophertiles.jpg" },
            { "status": 200, "size": "945", "path": "/004/gophertiles_002.jpg" },
            { "status": 200, "size": "697", "path": "/004/gophertiles_003.jpg" },            
            { "status": 200, "size": "725", "path": "/004/gophertiles_004.jpg" },
            { "status": 200, "size": "837", "path": "/004/gophertiles_005.jpg" },
            { "status": 200, "size": "770", "path": "/004/gophertiles_006.jpg" },
            { "status": 200, "size": "747", "path": "/004/gophertiles_007.jpg" },
            { "status": 200, "size": "694", "path": "/004/gophertiles_008.jpg" },
            { "status": 200, "size": "704", "path": "/004/gophertiles_009.jpg" },
            { "status": 200, "size": "994", "path": "/004/gophertiles_010.jpg" },
            { "status": 200, "size": "979", "path": "/004/gophertiles_011.jpg" },
            { "status": 200, "size": "895", "path": "/004/gophertiles_012.jpg" },
            { "status": 200, "size": "958", "path": "/004/gophertiles_013.jpg" },
            { "status": 200, "size": "894", "path": "/004/gophertiles_014.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_015.jpg" },
            { "status": 200, "size": "703", "path": "/004/gophertiles_016.jpg" },
            { "status": 200, "size": "707", "path": "/004/gophertiles_017.jpg" },
            { "status": 200, "size": "701", "path": "/004/gophertiles_018.jpg" },
            { "status": 200, "size": "1013", "path": "/004/gophertiles_019.jpg" },
            { "status": 200, "size": "737", "path": "/004/gophertiles_020.jpg" },
            { "status": 200, "size": "801", "path": "/004/gophertiles_021.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_022.jpg" },
            { "status": 200, "size": "905", "path": "/004/gophertiles_023.jpg" },
            { "status": 200, "size": "980", "path": "/004/gophertiles_024.jpg" },
            { "status": 200, "size": "708", "path": "/004/gophertiles_025.jpg" },
            { "status": 200, "size": "694", "path": "/004/gophertiles_026.jpg" },
            { "status": 200, "size": "697", "path": "/004/gophertiles_027.jpg" },
            { "status": 200, "size": "795", "path": "/004/gophertiles_028.jpg" },
            { "status": 200, "size": "978", "path": "/004/gophertiles_029.jpg" },
            { "status": 200, "size": "707", "path": "/004/gophertiles_030.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_031.jpg" },
            { "status": 200, "size": "688", "path": "/004/gophertiles_032.jpg" },
            { "status": 200, "size": "701", "path": "/004/gophertiles_033.jpg" },
            { "status": 200, "size": "898", "path": "/004/gophertiles_034.jpg" },
            { "status": 200, "size": "986", "path": "/004/gophertiles_035.jpg" },
            { "status": 200, "size": "770", "path": "/004/gophertiles_036.jpg" },
            { "status": 200, "size": "959", "path": "/004/gophertiles_037.jpg" },
            { "status": 200, "size": "936", "path": "/004/gophertiles_038.jpg" },
            { "status": 200, "size": "700", "path": "/004/gophertiles_039.jpg" },
            { "status": 200, "size": "784", "path": "/004/gophertiles_040.jpg" },
            { "status": 200, "size": "758", "path": "/004/gophertiles_041.jpg" },
            { "status": 200, "size": "796", "path": "/004/gophertiles_042.jpg" },
            { "status": 200, "size": "813", "path": "/004/gophertiles_043.jpg" },
            { "status": 200, "size": "924", "path": "/004/gophertiles_044.jpg" },
            { "status": 200, "size": "978", "path": "/004/gophertiles_045.jpg" },
            { "status": 200, "size": "752", "path": "/004/gophertiles_046.jpg" },
            { "status": 200, "size": "751", "path": "/004/gophertiles_047.jpg" },
            { "status": 200, "size": "737", "path": "/004/gophertiles_048.jpg" },
            { "status": 200, "size": "992", "path": "/004/gophertiles_049.jpg" },
            { "status": 200, "size": "688", "path": "/004/gophertiles_050.jpg" },
            { "status": 200, "size": "697", "path": "/004/gophertiles_051.jpg" },
            { "status": 200, "size": "699", "path": "/004/gophertiles_052.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_053.jpg" },
            { "status": 200, "size": "694", "path": "/004/gophertiles_054.jpg" },
            { "status": 200, "size": "767", "path": "/004/gophertiles_055.jpg" },
            { "status": 200, "size": "952", "path": "/004/gophertiles_056.jpg" },
            { "status": 200, "size": "788", "path": "/004/gophertiles_057.jpg" },
            { "status": 200, "size": "759", "path": "/004/gophertiles_058.jpg" },
            { "status": 200, "size": "700", "path": "/004/gophertiles_059.jpg" },
            { "status": 200, "size": "985", "path": "/004/gophertiles_060.jpg" },
            { "status": 200, "size": "915", "path": "/004/gophertiles_061.jpg" },
            { "status": 200, "size": "681", "path": "/004/gophertiles_062.jpg" },
            { "status": 200, "size": "707", "path": "/004/gophertiles_063.jpg" },
            { "status": 200, "size": "693", "path": "/004/gophertiles_064.jpg" },
            { "status": 200, "size": "861", "path": "/004/gophertiles_065.jpg" },
            { "status": 200, "size": "991", "path": "/004/gophertiles_066.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_067.jpg" },
            { "status": 200, "size": "697", "path": "/004/gophertiles_068.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_069.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_070.jpg" },
            { "status": 200, "size": "784", "path": "/004/gophertiles_071.jpg" },
            { "status": 200, "size": "698", "path": "/004/gophertiles_072.jpg" },
            { "status": 200, "size": "1004", "path": "/004/gophertiles_073.jpg" },
            { "status": 200, "size": "969", "path": "/004/gophertiles_074.jpg" },
            { "status": 200, "size": "915", "path": "/004/gophertiles_075.jpg" },
            { "status": 200, "size": "784", "path": "/004/gophertiles_076.jpg" },
            { "status": 200, "size": "697", "path": "/004/gophertiles_077.jpg" },
            { "status": 200, "size": "692", "path": "/004/gophertiles_078.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_079.jpg" },
            { "status": 200, "size": "725", "path": "/004/gophertiles_080.jpg" },
            { "status": 200, "size": "877", "path": "/004/gophertiles_081.jpg" },
            { "status": 200, "size": "743", "path": "/004/gophertiles_082.jpg" },
            { "status": 200, "size": "785", "path": "/004/gophertiles_083.jpg" },
            { "status": 200, "size": "690", "path": "/004/gophertiles_084.jpg" },
            { "status": 200, "size": "724", "path": "/004/gophertiles_085.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_086.jpg" },
            { "status": 200, "size": "883", "path": "/004/gophertiles_087.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_088.jpg" },
            { "status": 200, "size": "693", "path": "/004/gophertiles_089.jpg" },
            { "status": 200, "size": "947", "path": "/004/gophertiles_090.jpg" },
            { "status": 200, "size": "959", "path": "/004/gophertiles_091.jpg" },
            { "status": 200, "size": "736", "path": "/004/gophertiles_092.jpg" },
            { "status": 200, "size": "806", "path": "/004/gophertiles_093.jpg" },
            { "status": 200, "size": "820", "path": "/004/gophertiles_094.jpg" },
            { "status": 200, "size": "918", "path": "/004/gophertiles_095.jpg" },
            { "status": 200, "size": "689", "path": "/004/gophertiles_096.jpg" },
            { "status": 200, "size": "796", "path": "/004/gophertiles_097.jpg" },
            { "status": 200, "size": "686", "path": "/004/gophertiles_098.jpg" },
            { "status": 200, "size": "698", "path": "/004/gophertiles_099.jpg" },
            { "status": 200, "size": "686", "path": "/004/gophertiles_100.jpg" },
            { "status": 200, "size": "686", "path": "/004/gophertiles_101.jpg" },
            { "status": 200, "size": "682", "path": "/004/gophertiles_102.jpg" },
            { "status": 200, "size": "703", "path": "/004/gophertiles_103.jpg" },
            { "status": 200, "size": "698", "path": "/004/gophertiles_104.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_105.jpg" },
            { "status": 200, "size": "989", "path": "/004/gophertiles_106.jpg" },
            { "status": 200, "size": "720", "path": "/004/gophertiles_107.jpg" },
            { "status": 200, "size": "834", "path": "/004/gophertiles_108.jpg" },
            { "status": 200, "size": "756", "path": "/004/gophertiles_109.jpg" },
            { "status": 200, "size": "703", "path": "/004/gophertiles_110.jpg" },
            { "status": 200, "size": "815", "path": "/004/gophertiles_111.jpg" },
            { "status": 200, "size": "780", "path": "/004/gophertiles_112.jpg" },
            { "status": 200, "size": "992", "path": "/004/gophertiles_113.jpg" },
            { "status": 200, "size": "862", "path": "/004/gophertiles_114.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_115.jpg" },
            { "status": 200, "size": "756", "path": "/004/gophertiles_116.jpg" },
            { "status": 200, "size": "1012", "path": "/004/gophertiles_117.jpg" },
            { "status": 200, "size": "905", "path": "/004/gophertiles_118.jpg" },
            { "status": 200, "size": "808", "path": "/004/gophertiles_119.jpg" },
            { "status": 200, "size": "814", "path": "/004/gophertiles_120.jpg" },
            { "status": 200, "size": "832", "path": "/004/gophertiles_121.jpg" },
            { "status": 200, "size": "704", "path": "/004/gophertiles_122.jpg" },
            { "status": 200, "size": "741", "path": "/004/gophertiles_123.jpg" },
            { "status": 200, "size": "694", "path": "/004/gophertiles_124.jpg" },
            { "status": 200, "size": "950", "path": "/004/gophertiles_125.jpg" },
            { "status": 200, "size": "770", "path": "/004/gophertiles_126.jpg" },
            { "status": 200, "size": "749", "path": "/004/gophertiles_127.jpg" },
            { "status": 200, "size": "942", "path": "/004/gophertiles_128.jpg" },
            { "status": 200, "size": "997", "path": "/004/gophertiles_129.jpg" },
            { "status": 200, "size": "708", "path": "/004/gophertiles_130.jpg" },
            { "status": 200, "size": "821", "path": "/004/gophertiles_131.jpg" },
            { "status": 200, "size": "849", "path": "/004/gophertiles_132.jpg" },
            { "status": 200, "size": "715", "path": "/004/gophertiles_133.jpg" },
            { "status": 200, "size": "794", "path": "/004/gophertiles_134.jpg" },
            { "status": 200, "size": "869", "path": "/004/gophertiles_135.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_136.jpg" },
            { "status": 200, "size": "757", "path": "/004/gophertiles_137.jpg" },
            { "status": 200, "size": "991", "path": "/004/gophertiles_138.jpg" },
            { "status": 200, "size": "704", "path": "/004/gophertiles_139.jpg" },
            { "status": 200, "size": "707", "path": "/004/gophertiles_140.jpg" },
            { "status": 200, "size": "959", "path": "/004/gophertiles_141.jpg" },
            { "status": 200, "size": "691", "path": "/004/gophertiles_142.jpg" },
            { "status": 200, "size": "921", "path": "/004/gophertiles_143.jpg" },
            { "status": 200, "size": "932", "path": "/004/gophertiles_144.jpg" },
            { "status": 200, "size": "696", "path": "/004/gophertiles_145.jpg" },
            { "status": 200, "size": "711", "path": "/004/gophertiles_146.jpg" },
            { "status": 200, "size": "817", "path": "/004/gophertiles_147.jpg" },
            { "status": 200, "size": "966", "path": "/004/gophertiles_148.jpg" },
            { "status": 200, "size": "1002", "path": "/004/gophertiles_149.jpg" },
            { "status": 200, "size": "900", "path": "/004/gophertiles_150.jpg" },
            { "status": 200, "size": "724", "path": "/004/gophertiles_151.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_152.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_153.jpg" },
            { "status": 200, "size": "971", "path": "/004/gophertiles_154.jpg" },
            { "status": 200, "size": "708", "path": "/004/gophertiles_155.jpg" },
            { "status": 200, "size": "699", "path": "/004/gophertiles_156.jpg" },
            { "status": 200, "size": "834", "path": "/004/gophertiles_157.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_158.jpg" },
            { "status": 200, "size": "880", "path": "/004/gophertiles_159.jpg" },
            { "status": 200, "size": "701", "path": "/004/gophertiles_160.jpg" },
            { "status": 200, "size": "688", "path": "/004/gophertiles_161.jpg" },
            { "status": 200, "size": "853", "path": "/004/gophertiles_162.jpg" },
            { "status": 200, "size": "690", "path": "/004/gophertiles_163.jpg" },
            { "status": 200, "size": "759", "path": "/004/gophertiles_164.jpg" },
            { "status": 200, "size": "831", "path": "/004/gophertiles_165.jpg" },
            { "status": 200, "size": "732", "path": "/004/gophertiles_166.jpg" },
            { "status": 200, "size": "955", "path": "/004/gophertiles_167.jpg" },
            { "status": 200, "size": "1K", "path": "/004/gophertiles_168.jpg" },
            { "status": 200, "size": "969", "path": "/004/gophertiles_169.jpg" },
            { "status": 200, "size": "701", "path": "/004/gophertiles_170.jpg" },
            { "status": 200, "size": "755", "path": "/004/gophertiles_171.jpg" },
            { "status": 200, "size": "924", "path": "/004/gophertiles_172.jpg" },
            { "status": 200, "size": "958", "path": "/004/gophertiles_173.jpg" },
            { "status": 200, "size": "998", "path": "/004/gophertiles_174.jpg" },
            { "status": 200, "size": "702", "path": "/004/gophertiles_175.jpg" },
            { "status": 200, "size": "760", "path": "/004/gophertiles_176.jpg" },
            { "status": 200, "size": "732", "path": "/004/gophertiles_177.jpg" },
            { "status": 200, "size": "929", "path": "/004/gophertiles_178.jpg" },
            { "status": 200, "size": "712", "path": "/004/gophertiles_179.jpg" },
            { "status": 200, "size": "1013", "path": "/004/gophertiles_180.jpg" }
        ]            
            
    # page with js and css
    @pytest.mark.skipif(not TestEnv.has_nghttp_get_assets(), reason="no nghttp command available or nghttp ignores -a option")
    def test_006_04(self):
        url = TestEnv.mkurl("https", "test1", "/006.html")
        r = TestEnv.nghttp().assets(url, options=[ "-Haccept-encoding: none" ])
        assert 0 == r["rv"]
        assert 3 == len(r["assets"])
        assert r["assets"] == [
            { "status": 200, "size": "543", "path": "/006.html" },
            { "status": 200, "size": "216", "path": "/006/006.css" },
            { "status": 200, "size": "839", "path": "/006/006.js" }
        ]

    # page with image, try different window size
    @pytest.mark.skipif(not TestEnv.has_nghttp_get_assets(), reason="no nghttp command available or nghttp ignores -a option")
    def test_006_05(self):
        url = TestEnv.mkurl("https", "test1", "/003.html")
        r = TestEnv.nghttp().assets(url, options=[ "--window-bits=24", "-Haccept-encoding: none" ])
        assert 0 == r["rv"]
        assert 2 == len(r["assets"])
        assert r["assets"] == [
            { "status": 200, "size": "316", "path": "/003.html" },
            { "status": 200, "size": "88K", "path": "/003/003_img.jpg" }
        ]

