docstr: Test that ForwardMsg hash generation works as expected
docstr_tok: ["Test","that","ForwardMsg","hash","generation","works","as","expected"]
code: def test_msg_hash(self):
      """Test that ForwardMsg hash generation works as expected"""
      msg1 = create_dataframe_msg([1, 2, 3])
      msg2 = create_dataframe_msg([1, 2, 3])
      self.assertEqual(
          populate_hash_if_needed(msg1), populate_hash_if_needed(msg2)
      )
  
      msg3 = create_dataframe_msg([2, 3, 4])
      self.assertNotEqual(
          populate_hash_if_needed(msg1), populate_hash_if_needed(msg3)
      )
  
imports: import unittest
  from unittest.mock import MagicMock
  from streamlit import config
  from streamlit.runtime import app_session
  from streamlit.runtime.forward_msg_cache import ForwardMsgCache, create_reference_msg, populate_hash_if_needed
  from streamlit.runtime.stats import CacheStat
  from streamlit.testing.v1.util import patch_config_options
  from tests.streamlit.message_mocks import create_dataframe_msg
label_desc: Use image node_id 1 for calling the ForwardMsgCacheTest obj's underlying member method code with example usage: obj.test_msg_hash() without return types