docstr: Test that when skipping over a low volume contract (CLM17), we use the
  correct roll date for the previous contract (CLK17) when that
  contract's auto close date falls on the end date of the roll window.
code: def test_roll_window_ends_on_auto_close(self):
      """
      Test that when skipping over a low volume contract (CLM17), we use the
      correct roll date for the previous contract (CLK17) when that
      contract's auto close date falls on the end date of the roll window.
      """
      rolls = self.volume_roll_finder.get_rolls(
          root_symbol="CL",
          start=self.last_start_date,
          end=self.fifth_auto_close_date,
          offset=0,
      )
      self.assertEqual(
          rolls,
          [
              (1003, pd.Timestamp("2017-04-18", tz="UTC")),
              (1004, pd.Timestamp("2017-05-19", tz="UTC")),
              (1006, None),
          ],
      )
  
imports: from collections import deque
  from functools import partial
  from textwrap import dedent
  from numpy import arange, array, int64, full, repeat, tile
  from numpy.testing import assert_almost_equal
  import pandas
  from pandas import Timestamp, DataFrame
  from zipline.assets.continuous_futures import OrderedContracts, delivery_predicate
  from zipline.assets.roll_finder import ROLL_DAYS_FOR_CURRENT_CONTRACT, VolumeRollFinder
  from zipline.data.minute_bars import FUTURES_MINUTES_PER_DAY
  from zipline.errors import SymbolNotFound
  import zipline.testing.fixtures
label_desc: Use image node_id 8 for calling the RollFinderTestCase obj's underlying member method code with example usage: obj.test_roll_window_ends_on_auto_close() without return types