class_docstr: Test demo data download functions.
class_docstr_tok: ["Test","demo","data","download","functions","."]
docstr: Test data download function.
docstr_tok: ["Test","data","download","function","."]
code: def test_get_hurricane_florence_abi(self, gcsfs_mod):
      """Test data download function."""
      from satpy.demo import get_hurricane_florence_abi
  
      gcsfs_mod.GCSFileSystem = mock.MagicMock()
      gcsfs_inst = mock.MagicMock()
      gcsfs_mod.GCSFileSystem.return_value = gcsfs_inst
      # only return 5 results total
      gcsfs_inst.glob.side_effect = _GlobHelper([5, 0])
      # expected 16 files * 10 frames, got 16 * 5
      with pytest.raises(RuntimeError):
          get_hurricane_florence_abi()
      with pytest.raises(NotImplementedError):
          get_hurricane_florence_abi(method="unknown")
  
      gcsfs_inst.glob.side_effect = _GlobHelper(
          [int(240 / 16), 0, 0, 0] * 16
      )
      filenames = get_hurricane_florence_abi()
      assert 10 * 16 == len(filenames)
  
      gcsfs_inst.glob.side_effect = _GlobHelper(
          [int(240 / 16), 0, 0, 0] * 16
      )
      filenames = get_hurricane_florence_abi(channels=[2, 3, 4])
      assert 10 * 3 == len(filenames)
  
      gcsfs_inst.glob.side_effect = _GlobHelper(
          [int(240 / 16), 0, 0, 0] * 16
      )
      filenames = get_hurricane_florence_abi(
          channels=[2, 3, 4], num_frames=5
      )
      assert 5 * 3 == len(filenames)
  
      gcsfs_inst.glob.side_effect = _GlobHelper(
          [int(240 / 16), 0, 0, 0] * 16
      )
      filenames = get_hurricane_florence_abi(num_frames=5)
      assert 5 * 16 == len(filenames)
  
imports: from __future__ import annotations
  import contextlib
  import io
  import os
  import sys
  import tarfile
  import unittest
  from collections import defaultdict
  from unittest import mock
  import pytest
label_desc: Use image node_id 4 for calling the TestDemo obj's underlying member method code with example usage: obj.test_get_hurricane_florence_abi(gcsfs_mod) without return types