Verspottete Spring-Wilde-Vaultrekton in der Spring-Boot-Anwendung gibt immer ein Nullobjekt zurückJava

Java-Forum
Anonymous
 Verspottete Spring-Wilde-Vaultrekton in der Spring-Boot-Anwendung gibt immer ein Nullobjekt zurück

Post by Anonymous »

Ich habe Spring Security in meiner Spring -Boot -Anwendung implementiert und ebne Benutzeranmeldeinformationen aus Hashicorp Vault. Ich kann eine Verbindung zum Hashicorp -Tresor mithilfe der Vault -Vorlage von Spring Vault herstellen und eine erfolgreiche Gewölbeantwort empfangen. So sieht die Antwort aus (es ist eine Reihe von Hashmaps) < /p>

Code: Select all

 //VaultResponse output structure
[

data: {

password: someVal,

username: user,

db.password: somePass,

db.username: user

},

metadata: {

created_time: 2025-01-01,

custom_metadata: null,

detection_time: ,

destroyed: false,

version: 7

}

]

< /code>
Ich habe HashMap des genauen Datensatzes erstellt und einer ArrayList hinzugefügt und erwartet, dass diese Daten bei der Verspottung von VaultResponse zurückgegeben werden, aber stattdessen VaulTreponse.data kommt immer als Null zurück. < /p>
    @Test
public void loadUserByUsername_TestSuccess()
{
VaultResponse mockResponse = Mockito.mock(VaultResponse.class);

Map dataMap = new HashMap();
dataMap.put("password", "someVal");
dataMap.put("username", "user");
dataMap.put("db.password", "somePass");
dataMap.put("db.username", "user");

// Create the nested 'metadata' map
Map metadataMap = new HashMap();
metadataMap.put("created_time", "2025-01-01");
metadataMap.put("custom_metadata", null);
metadataMap.put("detection_time", "");
metadataMap.put("destroyed", false);
metadataMap.put("version", 7);

// Create a List to hold the dataMap and metadataMap
List responseList = new ArrayList();
responseList.add(dataMap);
responseList.add(metadataMap);

//**VaultResponse.data is always coming back as null**
when(mockResponse.getData()).thenReturn(responseList);

**Edit: Adding service class implemenation**

My service class implement's Spring Security's User's interface.  The method specifically being tested is :

< /code>
public class UserServiceClass
< /code>
{
public UserDetails loadUserByUsername(String
username) throws UsernameNotFoundException{
 //VaultTemplate bean is injected using
@Autowired

VaultResponse response =vaulTemplate.read(path);

if(response != null &&  response.getData != null)
{

Map vaultData =
response.getData();

//Traverse through vaultData, and extract
username and password

if(password == null or username == null){
throw new UsernameNotFoundException("User not
found");
} //end if

return new User(username,password);
}
} //end method
} //end class

//My test implementation
public class UserServiceclassTest{

@Mock
UserDetails userDetails;

@Mock
VaultTemplate vaultTemplate;
< /code>
@InjectMock
UserServiceClass userServiceClass
VaultResponse mockResponse =
Mockito.mock(VaultResponse.class);
  Map dataMap = new HashMap ();
dataMap.put("password", "someVal");
dataMap.put("username", "user");
dataMap.put("db.password", "somePass");
dataMap.put("db.username", "user");

// Create the nested 'metadata' map
Map metadataMap = new
HashMap();
metadataMap.put("created_time", "2025-0101");
metadataMap.put("custom_metadata", null);
metadataMap.put("detection_time", "");
metadataMap.put("destroyed", false);
metadataMap.put("version", 7);

// Create a List to hold the dataMap and
metadataMap
List responseList = new
ArrayList();
responseList.add(dataMap);
responseList.add(metadataMap);

public void loadUserByUsername() {
< /code>
when(mockResponse.getData()).thenReturn(responseList);
[b]//Here mockResponse is throwing null exception[/b]
when(vaultTemplate.read(path)).thenReturn(mockResponse);
//Traverse through data to get username and pass it to
function being called
UserDetails userDetails =
userServiceClass.loadUserByUsername(username);
//Assertions
}
}

Issue:
What am I doing wrong here? How can I mock VaultResponse.class to return the needed response structure?

Thank you

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post